From 150f5ade7ad5d4fca13c586253bfb9930f7b326c Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Tue, 29 Oct 2024 17:25:19 -0400 Subject: [PATCH 1/6] fix: extra ALGO in receiverAlgoNeededForClaim --- assets/arc-0059/__test__/arc59.test.ts | 36 +- assets/arc-0059/contracts/arc59.algo.ts | 13 + .../contracts/artifacts/ARC59.approval.teal | 268 +- .../contracts/artifacts/ARC59.arc32.json | 2 +- .../contracts/artifacts/ARC59.src_map.json | 3683 ++++++++++------- .../artifacts/MutableARC59.approval.teal | 268 +- .../artifacts/MutableARC59.arc32.json | 2 +- .../artifacts/MutableARC59.src_map.json | 3185 ++++++++------ .../arc-0059/contracts/clients/Arc59Client.ts | 2 +- .../contracts/clients/MutableARC59Client.ts | 2 +- assets/arc-0059/package-lock.json | 121 +- assets/arc-0059/package.json | 2 +- 12 files changed, 4381 insertions(+), 3203 deletions(-) diff --git a/assets/arc-0059/__test__/arc59.test.ts b/assets/arc-0059/__test__/arc59.test.ts index 576978d54..44b059e46 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 @@ -269,4 +273,34 @@ 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); + }); }); diff --git a/assets/arc-0059/contracts/arc59.algo.ts b/assets/arc-0059/contracts/arc59.algo.ts index dfd459436..841d6142a 100644 --- a/assets/arc-0059/contracts/arc59.algo.ts +++ b/assets/arc-0059/contracts/arc59.algo.ts @@ -140,6 +140,19 @@ 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; + const inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim; + if (inboxAlgoAvailable < info.receiverAlgoNeededForClaim) { + info.receiverAlgoNeededForClaim -= inboxAlgoAvailable; + } + } + return info; } diff --git a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal index 22dca0aa0..cb35adc8e 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal @@ -230,7 +230,7 @@ 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 // routerOptedIn = this.app.address.isOptedInToAsset(asset) @@ -542,7 +542,93 @@ arc59_getSendAssetInfo: *if6_end: *if5_end: - // contracts/arc59.algo.ts:143 + // *if7_condition + // contracts/arc59.algo.ts:144 + // 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:149 + // 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:150 + // inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + - + frame_dig 7 // algoConsumedByClaim: uint64 + - + frame_bury 8 // inboxAlgoAvailable: uint64 + + // *if8_condition + // contracts/arc59.algo.ts:151 + // 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:152 + // 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:156 // return info; frame_dig 2 // info: SendAssetInfo @@ -551,7 +637,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 +690,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:156 + // contracts/arc59.algo.ts:169 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -615,8 +701,8 @@ arc59_sendAsset: == assert - // *if7_condition - // contracts/arc59.algo.ts:161 + // *if9_condition + // contracts/arc59.algo.ts:174 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -624,10 +710,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:175 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -637,18 +723,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:163 + // contracts/arc59.algo.ts:176 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:164 + // contracts/arc59.algo.ts:177 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:165 + // contracts/arc59.algo.ts:178 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -661,16 +747,16 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // *if8_condition - // contracts/arc59.algo.ts:168 + // *if10_condition + // contracts/arc59.algo.ts:181 // 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:182 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -679,12 +765,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:170 + // contracts/arc59.algo.ts:183 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:171 + // contracts/arc59.algo.ts:184 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -696,14 +782,14 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if8_end: - // contracts/arc59.algo.ts:175 +*if10_end: + // contracts/arc59.algo.ts:188 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return -*if7_end: - // contracts/arc59.algo.ts:178 +*if9_end: + // contracts/arc59.algo.ts:191 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -711,22 +797,22 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:179 + // contracts/arc59.algo.ts:192 // 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 + // *if11_condition + // contracts/arc59.algo.ts:194 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 != - bz *if9_end + bz *if11_end - // *if9_consequent - // contracts/arc59.algo.ts:182 + // *if11_consequent + // contracts/arc59.algo.ts:195 // sendPayment({ // receiver: inbox, // amount: additionalReceiverFunds, @@ -735,12 +821,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:183 + // contracts/arc59.algo.ts:196 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:184 + // contracts/arc59.algo.ts:197 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -752,9 +838,9 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if9_end: - // *if10_condition - // contracts/arc59.algo.ts:188 +*if11_end: + // *if12_condition + // contracts/arc59.algo.ts:201 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -763,32 +849,32 @@ arc59_sendAsset: swap pop ! - bz *if10_end + bz *if12_end - // *if10_consequent - // contracts/arc59.algo.ts:189 + // *if12_consequent + // contracts/arc59.algo.ts:202 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if11_condition - // contracts/arc59.algo.ts:190 + // *if13_condition + // contracts/arc59.algo.ts:203 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if11_end + bz *if13_end - // *if11_consequent - // contracts/arc59.algo.ts:190 + // *if13_consequent + // contracts/arc59.algo.ts:203 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:193 +*if13_end: + // *if14_condition + // contracts/arc59.algo.ts:206 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -799,10 +885,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if12_end + bz *if14_end - // *if12_consequent - // contracts/arc59.algo.ts:194 + // *if14_consequent + // contracts/arc59.algo.ts:207 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -811,12 +897,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:208 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:196 + // contracts/arc59.algo.ts:209 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -828,8 +914,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:201 +*if14_end: + // contracts/arc59.algo.ts:214 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -840,22 +926,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:202 + // contracts/arc59.algo.ts:215 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:216 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:204 + // contracts/arc59.algo.ts:217 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:205 + // contracts/arc59.algo.ts:218 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -868,8 +954,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if10_end: - // contracts/arc59.algo.ts:210 +*if12_end: + // contracts/arc59.algo.ts:223 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -879,18 +965,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:211 + // contracts/arc59.algo.ts:224 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:212 + // contracts/arc59.algo.ts:225 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:226 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -903,7 +989,7 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:216 + // contracts/arc59.algo.ts:229 // return inbox; frame_dig 1 // inbox: address @@ -937,14 +1023,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:238 // 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:240 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -956,17 +1042,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:228 + // contracts/arc59.algo.ts:241 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:242 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:243 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -974,12 +1060,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:244 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:232 + // contracts/arc59.algo.ts:245 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -991,7 +1077,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:235 + // contracts/arc59.algo.ts:248 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1001,17 +1087,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:236 + // contracts/arc59.algo.ts:249 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:237 + // contracts/arc59.algo.ts:250 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:238 + // contracts/arc59.algo.ts:251 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1053,14 +1139,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:262 // 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:264 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1072,19 +1158,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:252 + // contracts/arc59.algo.ts:265 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:253 + // contracts/arc59.algo.ts:266 // 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:267 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1092,12 +1178,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:255 + // contracts/arc59.algo.ts:268 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:256 + // contracts/arc59.algo.ts:269 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1111,7 +1197,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:259 + // contracts/arc59.algo.ts:272 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1121,17 +1207,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:260 + // contracts/arc59.algo.ts:273 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:261 + // contracts/arc59.algo.ts:274 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:262 + // contracts/arc59.algo.ts:275 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1180,7 +1266,7 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:274 + // contracts/arc59.algo.ts:287 // return this.inboxes(receiver).exists ? this.inboxes(receiver).value : globals.zeroAddress; frame_dig -1 // receiver: Address box_len @@ -1214,14 +1300,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:292 // 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:294 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1234,7 +1320,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:283 + // contracts/arc59.algo.ts:296 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1244,17 +1330,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:284 + // contracts/arc59.algo.ts:297 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:285 + // contracts/arc59.algo.ts:298 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:286 + // contracts/arc59.algo.ts:299 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json index f6f9836f2..35dfc868f 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json @@ -74,7 +74,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQzCgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDYKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYxCgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MwoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY0CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjUKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzAKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcxCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWY4X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOV9lbmQ6CgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg5CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTAKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTMKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODEKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NAoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDkKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTAKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MQoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OQoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NgoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MgoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjUKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDIKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjQKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjYKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjczCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzQKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODcKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NAoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk2CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json index 66c6a1100..9fba7fb18 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json @@ -19,59 +19,59 @@ 13, 14, 15, - 16 + 16, + 17 ] }, { "teal": 13, "source": 33, "pc": [ - 17, - 18 + 18, + 19 ] }, { "teal": 14, "source": 33, "pc": [ - 19 + 20 ] }, { "teal": 15, "source": 33, "pc": [ - 20, - 21 + 21, + 22 ] }, { "teal": 16, "source": 33, "pc": [ - 22 + 23 ] }, { "teal": 17, "source": 33, "pc": [ - 23, - 24 + 24, + 25 ] }, { "teal": 18, "source": 33, "pc": [ - 25 + 26 ] }, { "teal": 19, "source": 33, "pc": [ - 26, 27, 28, 29, @@ -96,438 +96,438 @@ 48, 49, 50, - 51 + 51, + 52 ] }, { "teal": 22, "source": 33, "pc": [ - 52 + 53 ] }, { "teal": 27, "source": 40, "pc": [ - 53, 54, - 55 + 55, + 56 ] }, { "teal": 28, "source": 40, "pc": [ - 56 + 57 ] }, { "teal": 29, "source": 40, "pc": [ - 57 + 58 ] }, { "teal": 35, "source": 40, "pc": [ - 58, 59, - 60 + 60, + 61 ] }, { "teal": 36, "source": 40, "pc": [ - 61 + 62 ] }, { "teal": 41, "source": 47, "pc": [ - 62, 63, - 64 + 64, + 65 ] }, { "teal": 42, "source": 47, "pc": [ - 65 + 66 ] }, { "teal": 45, "source": 47, "pc": [ - 66, 67, - 68 + 68, + 69 ] }, { "teal": 46, "source": 47, "pc": [ - 69 + 70 ] }, { "teal": 47, "source": 47, "pc": [ - 70 + 71 ] }, { "teal": 55, "source": 47, "pc": [ - 71, 72, - 73 + 73, + 74 ] }, { "teal": 63, "source": 48, "pc": [ - 74 + 75 ] }, { "teal": 64, "source": 48, "pc": [ - 75 + 76 ] }, { "teal": 65, "source": 48, "pc": [ - 76, - 77 + 77, + 78 ] }, { "teal": 69, "source": 49, "pc": [ - 78, - 79 + 79, + 80 ] }, { "teal": 70, "source": 49, "pc": [ - 80, - 81 + 81, + 82 ] }, { "teal": 74, "source": 50, "pc": [ - 82 + 83 ] }, { "teal": 75, "source": 50, "pc": [ - 83, - 84 + 84, + 85 ] }, { "teal": 79, "source": 51, "pc": [ - 85, - 86 + 86, + 87 ] }, { "teal": 80, "source": 51, "pc": [ - 87, - 88 + 88, + 89 ] }, { "teal": 83, "source": 48, "pc": [ - 89 + 90 ] }, { "teal": 84, "source": 48, "pc": [ - 90, - 91 + 91, + 92 ] }, { "teal": 87, "source": 48, "pc": [ - 92 + 93 ] }, { "teal": 88, "source": 47, "pc": [ - 93 + 94 ] }, { "teal": 93, "source": 61, "pc": [ - 94 + 95 ] }, { "teal": 96, "source": 61, "pc": [ - 95, 96, - 97 + 97, + 98 ] }, { "teal": 97, "source": 61, "pc": [ - 98 + 99 ] }, { "teal": 98, "source": 61, "pc": [ - 99 + 100 ] }, { "teal": 99, "source": 61, "pc": [ - 100 + 101 ] }, { "teal": 100, "source": 61, "pc": [ - 101 + 102 ] }, { "teal": 101, "source": 61, "pc": [ - 102 + 103 ] }, { "teal": 104, "source": 61, "pc": [ - 103, 104, - 105 + 105, + 106 ] }, { "teal": 105, "source": 61, "pc": [ - 106 + 107 ] }, { "teal": 106, "source": 61, "pc": [ - 107 + 108 ] }, { "teal": 107, "source": 61, "pc": [ - 108 + 109 ] }, { "teal": 108, "source": 61, "pc": [ - 109 + 110 ] }, { "teal": 117, "source": 61, "pc": [ - 110, 111, - 112 + 112, + 113 ] }, { "teal": 120, "source": 61, "pc": [ - 113 + 114 ] }, { "teal": 125, "source": 62, "pc": [ - 114, - 115 + 115, + 116 ] }, { "teal": 126, "source": 62, "pc": [ - 116 + 117 ] }, { "teal": 127, "source": 62, "pc": [ - 117 + 118 ] }, { "teal": 128, "source": 62, "pc": [ - 118 + 119 ] }, { "teal": 129, "source": 62, "pc": [ - 119, 120, - 121 + 121, + 122 ] }, { "teal": 134, "source": 62, "pc": [ - 122, - 123 + 123, + 124 ] }, { "teal": 135, "source": 62, "pc": [ - 124 + 125 ] }, { "teal": 136, "source": 62, "pc": [ - 125 + 126 ] }, { "teal": 137, "source": 62, "pc": [ - 126, 127, - 128 + 128, + 129 ] }, { "teal": 146, "source": 64, "pc": [ - 129 + 130 ] }, { "teal": 147, "source": 64, "pc": [ - 130, - 131 + 131, + 132 ] }, { "teal": 148, "source": 64, "pc": [ - 132, - 133 + 133, + 134 ] }, { "teal": 149, "source": 64, "pc": [ - 134, 135, 136, 137, 138, - 139 + 139, + 140 ] }, { "teal": 150, "source": 64, "pc": [ - 140, - 141 + 141, + 142 ] }, { "teal": 154, "source": 65, "pc": [ - 142, - 143 + 143, + 144 ] }, { "teal": 155, "source": 65, "pc": [ - 144, - 145 + 145, + 146 ] }, { "teal": 159, "source": 66, "pc": [ - 146, 147, 148, 149, @@ -614,374 +614,374 @@ 230, 231, 232, - 233 + 233, + 234 ] }, { "teal": 160, "source": 66, "pc": [ - 234, - 235 + 235, + 236 ] }, { "teal": 164, "source": 67, "pc": [ - 236, 237, - 238 + 238, + 239 ] }, { "teal": 165, "source": 67, "pc": [ - 239, - 240 + 240, + 241 ] }, { "teal": 168, "source": 64, "pc": [ - 241 + 242 ] }, { "teal": 169, "source": 64, "pc": [ - 242, - 243 + 243, + 244 ] }, { "teal": 172, "source": 64, "pc": [ - 244 + 245 ] }, { "teal": 173, "source": 64, "pc": [ - 245, - 246 + 246, + 247 ] }, { "teal": 174, "source": 64, "pc": [ - 247 + 248 ] }, { "teal": 175, "source": 64, "pc": [ - 248 + 249 ] }, { "teal": 176, "source": 64, "pc": [ - 249, - 250 + 250, + 251 ] }, { "teal": 177, "source": 64, "pc": [ - 251, 252, - 253 + 253, + 254 ] }, { "teal": 178, "source": 64, "pc": [ - 254, - 255 + 255, + 256 ] }, { "teal": 182, "source": 70, "pc": [ - 256, - 257 + 257, + 258 ] }, { "teal": 183, "source": 70, "pc": [ - 258, - 259 + 259, + 260 ] }, { "teal": 184, "source": 70, "pc": [ - 260 + 261 ] }, { "teal": 188, "source": 72, "pc": [ - 261, - 262 + 262, + 263 ] }, { "teal": 192, "source": 61, "pc": [ - 263, - 264 + 264, + 265 ] }, { "teal": 193, "source": 61, "pc": [ - 265 + 266 ] }, { "teal": 198, "source": 84, "pc": [ - 266 + 267 ] }, { "teal": 201, "source": 84, "pc": [ - 267, 268, - 269 + 269, + 270 ] }, { "teal": 202, "source": 84, "pc": [ - 270 + 271 ] }, { "teal": 205, "source": 84, "pc": [ - 271, 272, - 273 + 273, + 274 ] }, { "teal": 206, "source": 84, "pc": [ - 274 + 275 ] }, { "teal": 207, "source": 84, "pc": [ - 275 + 276 ] }, { "teal": 208, "source": 84, "pc": [ - 276 + 277 ] }, { "teal": 209, "source": 84, "pc": [ - 277 + 278 ] }, { "teal": 210, "source": 84, "pc": [ - 278 + 279 ] }, { "teal": 213, "source": 84, "pc": [ - 279, 280, - 281 + 281, + 282 ] }, { "teal": 214, "source": 84, "pc": [ - 282 + 283 ] }, { "teal": 215, "source": 84, "pc": [ - 283 + 284 ] }, { "teal": 216, "source": 84, "pc": [ - 284 + 285 ] }, { "teal": 217, "source": 84, "pc": [ - 285 + 286 ] }, { "teal": 229, "source": 84, "pc": [ - 286, 287, - 288 + 288, + 289 ] }, { "teal": 232, "source": 84, "pc": [ - 289 + 290 ] }, { "teal": 233, "source": 84, "pc": [ - 290, - 291 + 291, + 292 ] }, { "teal": 237, "source": 85, "pc": [ - 292, - 293 + 293, + 294 ] }, { "teal": 238, "source": 85, "pc": [ - 294, - 295 + 295, + 296 ] }, { "teal": 239, "source": 85, "pc": [ - 296, - 297 + 297, + 298 ] }, { "teal": 240, "source": 85, "pc": [ - 298 + 299 ] }, { "teal": 241, "source": 85, "pc": [ - 299 + 300 ] }, { "teal": 242, "source": 85, "pc": [ - 300, - 301 + 301, + 302 ] }, { "teal": 246, "source": 86, "pc": [ - 302, - 303 + 303, + 304 ] }, { "teal": 247, "source": 86, "pc": [ - 304, - 305 + 305, + 306 ] }, { "teal": 248, "source": 86, "pc": [ - 306, - 307 + 307, + 308 ] }, { "teal": 249, "source": 86, "pc": [ - 308 + 309 ] }, { "teal": 250, "source": 86, "pc": [ - 309 + 310 ] }, { "teal": 251, "source": 86, "pc": [ - 310, - 311 + 311, + 312 ] }, { "teal": 261, "source": 89, "pc": [ - 312, 313, 314, 315, @@ -998,74 +998,74 @@ 326, 327, 328, - 329 + 329, + 330 ] }, { "teal": 262, "source": 90, "pc": [ - 330, 331, - 332 + 332, + 333 ] }, { "teal": 263, "source": 90, "pc": [ - 333 + 334 ] }, { "teal": 264, "source": 90, "pc": [ - 334, - 335 + 335, + 336 ] }, { "teal": 265, "source": 90, "pc": [ - 336 + 337 ] }, { "teal": 266, "source": 91, "pc": [ - 337 + 338 ] }, { "teal": 267, "source": 91, "pc": [ - 338, - 339 + 339, + 340 ] }, { "teal": 268, "source": 91, "pc": [ - 340 + 341 ] }, { "teal": 269, "source": 92, "pc": [ - 341 + 342 ] }, { "teal": 270, "source": 92, "pc": [ - 342, 343, 344, 345, @@ -1074,2713 +1074,2707 @@ 348, 349, 350, - 351 + 351, + 352 ] }, { "teal": 271, "source": 92, "pc": [ - 352 + 353 ] }, { "teal": 272, "source": 87, "pc": [ - 353, - 354 + 354, + 355 ] }, { "teal": 277, "source": 95, "pc": [ - 355, - 356 + 356, + 357 ] }, { "teal": 278, "source": 95, "pc": [ - 357, 358, - 359 + 359, + 360 ] }, { "teal": 283, "source": 95, "pc": [ - 360, - 361 + 361, + 362 ] }, { "teal": 284, "source": 95, "pc": [ - 362, 363, - 364 + 364, + 365 ] }, { "teal": 289, "source": 97, "pc": [ - 365, - 366 + 366, + 367 ] }, { "teal": 290, "source": 97, "pc": [ - 367, - 368 + 368, + 369 ] }, { "teal": 291, "source": 97, "pc": [ - 369 + 370 ] }, { "teal": 292, "source": 97, "pc": [ - 370, - 371 + 371, + 372 ] }, { "teal": 293, "source": 97, "pc": [ - 372 + 373 ] }, { "teal": 294, "source": 97, "pc": [ - 373, - 374 + 374, + 375 ] }, { "teal": 295, "source": 97, "pc": [ - 375 + 376 ] }, { "teal": 296, "source": 97, "pc": [ - 376, - 377 + 377, + 378 ] }, { "teal": 301, "source": 100, "pc": [ - 378, - 379 + 379, + 380 ] }, { "teal": 302, "source": 100, "pc": [ - 380, - 381 + 381, + 382 ] }, { "teal": 303, "source": 100, "pc": [ - 382 + 383 ] }, { "teal": 304, "source": 100, "pc": [ - 383, - 384 + 384, + 385 ] }, { "teal": 305, "source": 100, "pc": [ - 385 + 386 ] }, { "teal": 306, "source": 100, "pc": [ - 386, 387, - 388 + 388, + 389 ] }, { "teal": 311, "source": 101, "pc": [ - 389, - 390 + 390, + 391 ] }, { "teal": 312, "source": 101, "pc": [ - 391, - 392 + 392, + 393 ] }, { "teal": 313, "source": 101, "pc": [ - 393, - 394 + 394, + 395 ] }, { "teal": 314, "source": 101, "pc": [ - 395, - 396 + 396, + 397 ] }, { "teal": 315, "source": 101, "pc": [ - 397, - 398 + 398, + 399 ] }, { "teal": 316, "source": 101, "pc": [ - 399, - 400 + 400, + 401 ] }, { "teal": 317, "source": 101, "pc": [ - 401, - 402 + 402, + 403 ] }, { "teal": 318, "source": 101, "pc": [ - 403, 404, - 405 + 405, + 406 ] }, { "teal": 319, "source": 101, "pc": [ - 406 + 407 ] }, { "teal": 320, "source": 101, "pc": [ - 407, - 408 + 408, + 409 ] }, { "teal": 321, "source": 101, "pc": [ - 409, - 410 + 410, + 411 ] }, { "teal": 322, "source": 101, "pc": [ - 411, - 412 + 412, + 413 ] }, { "teal": 323, "source": 101, "pc": [ - 413 + 414 ] }, { "teal": 324, "source": 101, "pc": [ - 414 + 415 ] }, { "teal": 325, "source": 101, "pc": [ - 415 + 416 ] }, { "teal": 326, "source": 101, "pc": [ - 416 + 417 ] }, { "teal": 327, "source": 101, "pc": [ - 417 + 418 ] }, { "teal": 328, "source": 101, "pc": [ - 418, - 419 + 419, + 420 ] }, { "teal": 334, "source": 105, "pc": [ - 420, - 421 + 421, + 422 ] }, { "teal": 335, "source": 105, "pc": [ - 422 + 423 ] }, { "teal": 336, "source": 105, "pc": [ - 423, 424, - 425 + 425, + 426 ] }, { "teal": 341, "source": 106, "pc": [ - 426, - 427 + 427, + 428 ] }, { "teal": 342, "source": 106, "pc": [ - 428, - 429 + 429, + 430 ] }, { "teal": 343, "source": 106, "pc": [ - 430, - 431 + 431, + 432 ] }, { "teal": 344, "source": 106, "pc": [ - 432, - 433 + 433, + 434 ] }, { "teal": 345, "source": 106, "pc": [ - 434, - 435 + 435, + 436 ] }, { "teal": 346, "source": 106, "pc": [ - 436, - 437 + 437, + 438 ] }, { "teal": 347, "source": 106, "pc": [ - 438, - 439 + 439, + 440 ] }, { "teal": 348, "source": 106, "pc": [ - 440, 441, - 442 + 442, + 443 ] }, { "teal": 349, "source": 106, "pc": [ - 443 + 444 ] }, { "teal": 350, "source": 106, "pc": [ - 444, - 445 + 445, + 446 ] }, { "teal": 351, "source": 106, "pc": [ - 446 + 447 ] }, { "teal": 352, "source": 106, "pc": [ - 447 + 448 ] }, { "teal": 353, "source": 106, "pc": [ - 448 + 449 ] }, { "teal": 354, "source": 106, "pc": [ - 449, - 450 + 450, + 451 ] }, { "teal": 358, "source": 107, "pc": [ - 451, - 452 + 452, + 453 ] }, { "teal": 359, "source": 107, "pc": [ - 453, - 454 + 454, + 455 ] }, { "teal": 360, "source": 107, "pc": [ - 455, - 456 + 456, + 457 ] }, { "teal": 361, "source": 107, "pc": [ - 457 + 458 ] }, { "teal": 362, "source": 107, "pc": [ - 458, - 459 + 459, + 460 ] }, { "teal": 363, "source": 107, "pc": [ - 460, - 461 + 461, + 462 ] }, { "teal": 364, "source": 107, "pc": [ - 462, - 463 + 463, + 464 ] }, { "teal": 365, "source": 107, "pc": [ - 464, 465, - 466 + 466, + 467 ] }, { "teal": 366, "source": 107, "pc": [ - 467 + 468 ] }, { "teal": 367, "source": 107, "pc": [ - 468 + 469 ] }, { "teal": 368, "source": 107, "pc": [ - 469 + 470 ] }, { "teal": 369, "source": 107, "pc": [ - 470 + 471 ] }, { "teal": 370, "source": 107, "pc": [ - 471 + 472 ] }, { "teal": 371, "source": 107, "pc": [ - 472, - 473 + 473, + 474 ] }, { "teal": 377, "source": 110, "pc": [ - 474, - 475 + 475, + 476 ] }, { "teal": 378, "source": 110, "pc": [ - 476 + 477 ] }, { "teal": 379, "source": 110, "pc": [ - 477 + 478 ] }, { "teal": 380, "source": 110, "pc": [ - 478 + 479 ] }, { "teal": 381, "source": 110, "pc": [ - 479 + 480 ] }, { "teal": 382, "source": 110, "pc": [ - 480, 481, - 482 + 482, + 483 ] }, { "teal": 387, "source": 114, "pc": [ - 483, - 484 + 484, + 485 ] }, { "teal": 388, "source": 114, "pc": [ - 485, - 486 + 486, + 487 ] }, { "teal": 389, "source": 114, "pc": [ - 487, - 488 + 488, + 489 ] }, { "teal": 390, "source": 114, "pc": [ - 489 + 490 ] }, { "teal": 391, "source": 114, "pc": [ - 490, - 491 + 491, + 492 ] }, { "teal": 392, "source": 114, "pc": [ - 492, - 493 + 493, + 494 ] }, { "teal": 393, "source": 114, "pc": [ - 494, - 495 + 495, + 496 ] }, { "teal": 394, "source": 114, "pc": [ - 496, 497, - 498 + 498, + 499 ] }, { "teal": 395, "source": 114, "pc": [ - 499 + 500 ] }, { "teal": 396, "source": 114, "pc": [ - 500 + 501 ] }, { "teal": 397, "source": 114, "pc": [ - 501 + 502 ] }, { "teal": 398, "source": 114, "pc": [ - 502 + 503 ] }, { "teal": 399, "source": 114, "pc": [ - 503 + 504 ] }, { "teal": 400, "source": 114, "pc": [ - 504, - 505 + 505, + 506 ] }, { "teal": 404, "source": 117, "pc": [ - 506, - 507 + 507, + 508 ] }, { "teal": 405, "source": 117, "pc": [ - 508, - 509 + 509, + 510 ] }, { "teal": 406, "source": 117, "pc": [ - 510 + 511 ] }, { "teal": 407, "source": 117, "pc": [ - 511, - 512 + 512, + 513 ] }, { "teal": 411, "source": 118, "pc": [ - 513, - 514 + 514, + 515 ] }, { "teal": 412, "source": 118, "pc": [ - 515, - 516 + 516, + 517 ] }, { "teal": 413, "source": 118, "pc": [ - 517 + 518 ] }, { "teal": 417, "source": 119, "pc": [ - 518, - 519 + 519, + 520 ] }, { "teal": 418, "source": 119, "pc": [ - 520, - 521 + 521, + 522 ] }, { "teal": 419, "source": 119, "pc": [ - 522 + 523 ] }, { "teal": 420, "source": 119, "pc": [ - 523, - 524 + 524, + 525 ] }, { "teal": 421, "source": 119, "pc": [ - 525 + 526 ] }, { "teal": 422, "source": 119, "pc": [ - 526, - 527 + 527, + 528 ] }, { "teal": 426, "source": 120, "pc": [ - 528, - 529 + 529, + 530 ] }, { "teal": 427, "source": 120, "pc": [ - 530 + 531 ] }, { "teal": 431, "source": 123, "pc": [ - 531, - 532 + 532, + 533 ] }, { "teal": 432, "source": 123, "pc": [ - 533, - 534 + 534, + 535 ] }, { "teal": 433, "source": 123, "pc": [ - 535, - 536 + 536, + 537 ] }, { "teal": 434, "source": 123, "pc": [ - 537, - 538 + 538, + 539 ] }, { "teal": 435, "source": 123, "pc": [ - 539, - 540 + 540, + 541 ] }, { "teal": 436, "source": 123, "pc": [ - 541, - 542 + 542, + 543 ] }, { "teal": 437, "source": 123, "pc": [ - 543, - 544 + 544, + 545 ] }, { "teal": 438, "source": 123, "pc": [ - 545, 546, - 547 + 547, + 548 ] }, { "teal": 439, "source": 123, "pc": [ - 548 + 549 ] }, { "teal": 440, "source": 123, "pc": [ - 549, - 550 + 550, + 551 ] }, { "teal": 441, "source": 123, "pc": [ - 551, - 552 + 552, + 553 ] }, { "teal": 442, "source": 123, "pc": [ - 553 + 554 ] }, { "teal": 443, "source": 123, "pc": [ - 554, - 555 + 555, + 556 ] }, { "teal": 444, "source": 123, "pc": [ - 556 + 557 ] }, { "teal": 445, "source": 123, "pc": [ - 557 + 558 ] }, { "teal": 446, "source": 123, "pc": [ - 558 + 559 ] }, { "teal": 447, "source": 123, "pc": [ - 559 + 560 ] }, { "teal": 448, "source": 123, "pc": [ - 560, - 561 + 561, + 562 ] }, { "teal": 452, "source": 125, "pc": [ - 562, - 563 + 563, + 564 ] }, { "teal": 453, "source": 125, "pc": [ - 564, 565, - 566 + 566, + 567 ] }, { "teal": 458, "source": 128, "pc": [ - 567, - 568 + 568, + 569 ] }, { "teal": 459, "source": 128, "pc": [ - 569 + 570 ] }, { "teal": 460, "source": 128, "pc": [ - 570 + 571 ] }, { "teal": 461, "source": 128, "pc": [ - 571, - 572 + 572, + 573 ] }, { "teal": 466, "source": 130, "pc": [ - 573, - 574 + 574, + 575 ] }, { "teal": 467, "source": 130, "pc": [ - 575, - 576 + 576, + 577 ] }, { "teal": 468, "source": 130, "pc": [ - 577, - 578 + 578, + 579 ] }, { "teal": 469, "source": 130, "pc": [ - 579 + 580 ] }, { "teal": 470, "source": 130, "pc": [ - 580 + 581 ] }, { "teal": 471, "source": 130, "pc": [ - 581 + 582 ] }, { "teal": 472, "source": 130, "pc": [ - 582, 583, - 584 + 584, + 585 ] }, { "teal": 477, "source": 132, "pc": [ - 585, - 586 + 586, + 587 ] }, { "teal": 478, "source": 132, "pc": [ - 587, - 588 + 588, + 589 ] }, { "teal": 479, "source": 132, "pc": [ - 589, - 590 + 590, + 591 ] }, { "teal": 480, "source": 132, "pc": [ - 591 + 592 ] }, { "teal": 481, "source": 132, "pc": [ - 592, - 593 + 593, + 594 ] }, { "teal": 482, "source": 132, "pc": [ - 594, - 595 + 595, + 596 ] }, { "teal": 483, "source": 132, "pc": [ - 596, - 597 + 597, + 598 ] }, { "teal": 484, "source": 132, "pc": [ - 598, 599, - 600 + 600, + 601 ] }, { "teal": 485, "source": 132, "pc": [ - 601 + 602 ] }, { "teal": 486, "source": 132, "pc": [ - 602 + 603 ] }, { "teal": 487, "source": 132, "pc": [ - 603 + 604 ] }, { "teal": 488, "source": 132, "pc": [ - 604 + 605 ] }, { "teal": 489, "source": 132, "pc": [ - 605 + 606 ] }, { "teal": 490, "source": 132, "pc": [ - 606, - 607 + 607, + 608 ] }, { "teal": 495, "source": 134, "pc": [ - 608, - 609 + 609, + 610 ] }, { "teal": 496, "source": 134, "pc": [ - 610, - 611 + 611, + 612 ] }, { "teal": 497, "source": 134, "pc": [ - 612 + 613 ] }, { "teal": 498, "source": 134, "pc": [ - 613, - 614 + 614, + 615 ] }, { "teal": 499, "source": 134, "pc": [ - 615, - 616 + 616, + 617 ] }, { "teal": 500, "source": 134, "pc": [ - 617 + 618 ] }, { "teal": 501, "source": 134, "pc": [ - 618, - 619 + 619, + 620 ] }, { "teal": 502, "source": 134, "pc": [ - 620 + 621 ] }, { "teal": 503, "source": 134, "pc": [ - 621 + 622 ] }, { "teal": 504, "source": 134, "pc": [ - 622 + 623 ] }, { "teal": 505, "source": 134, "pc": [ - 623, 624, - 625 + 625, + 626 ] }, { "teal": 510, "source": 136, "pc": [ - 626, - 627 + 627, + 628 ] }, { "teal": 511, "source": 136, "pc": [ - 628, - 629 + 629, + 630 ] }, { "teal": 512, "source": 136, "pc": [ - 630, - 631 + 631, + 632 ] }, { "teal": 513, "source": 136, "pc": [ - 632 + 633 ] }, { "teal": 514, "source": 136, "pc": [ - 633, - 634 + 634, + 635 ] }, { "teal": 515, "source": 136, "pc": [ - 635, - 636 + 636, + 637 ] }, { "teal": 516, "source": 136, "pc": [ - 637, - 638 + 638, + 639 ] }, { "teal": 517, "source": 136, "pc": [ - 639, 640, - 641 + 641, + 642 ] }, { "teal": 518, "source": 136, "pc": [ - 642 + 643 ] }, { "teal": 519, "source": 136, "pc": [ - 643 + 644 ] }, { "teal": 520, "source": 136, "pc": [ - 644 + 645 ] }, { "teal": 521, "source": 136, "pc": [ - 645 + 646 ] }, { "teal": 522, "source": 136, "pc": [ - 646 + 647 ] }, { "teal": 523, "source": 136, "pc": [ - 647, - 648 + 648, + 649 ] }, { "teal": 527, "source": 139, "pc": [ - 649, - 650 + 650, + 651 ] }, { "teal": 528, "source": 139, "pc": [ - 651, - 652 + 652, + 653 ] }, { "teal": 529, "source": 139, "pc": [ - 653, - 654 + 654, + 655 ] }, { "teal": 530, "source": 139, "pc": [ - 655, - 656 + 656, + 657 ] }, { "teal": 531, "source": 139, "pc": [ - 657, - 658 + 658, + 659 ] }, { "teal": 532, "source": 139, "pc": [ - 659, - 660 + 660, + 661 ] }, { "teal": 533, "source": 139, "pc": [ - 661, - 662 + 662, + 663 ] }, { "teal": 534, "source": 139, "pc": [ - 663, 664, - 665 + 665, + 666 ] }, { "teal": 535, "source": 139, "pc": [ - 666 + 667 ] }, { "teal": 536, "source": 139, "pc": [ - 667, - 668 + 668, + 669 ] }, { "teal": 537, "source": 139, "pc": [ - 669 + 670 ] }, { "teal": 538, "source": 139, "pc": [ - 670 + 671 ] }, { "teal": 539, "source": 139, "pc": [ - 671 + 672 ] }, { "teal": 540, "source": 139, "pc": [ - 672, - 673 + 673, + 674 ] }, { - "teal": 547, - "source": 143, + "teal": 548, + "source": 144, "pc": [ - 674, - 675 + 675, + 676 ] }, { - "teal": 551, - "source": 84, + "teal": 549, + "source": 144, "pc": [ - 676, - 677 + 677, + 678 ] }, { - "teal": 554, - "source": 84, + "teal": 550, + "source": 144, "pc": [ - 678, 679 ] }, { - "teal": 555, - "source": 84, + "teal": 551, + "source": 144, "pc": [ - 680 + 680, + 681 ] }, { - "teal": 560, - "source": 155, + "teal": 552, + "source": 144, "pc": [ - 681 + 682, + 683 ] }, { - "teal": 563, - "source": 155, + "teal": 553, + "source": 144, "pc": [ - 682, - 683, 684 ] }, { - "teal": 564, - "source": 155, + "teal": 554, + "source": 144, "pc": [ 685 ] }, { - "teal": 567, - "source": 155, + "teal": 555, + "source": 144, "pc": [ - 686, - 687, - 688 + 686 ] }, { - "teal": 568, - "source": 155, + "teal": 556, + "source": 144, "pc": [ + 687, + 688, 689 ] }, { - "teal": 569, - "source": 155, - "pc": [ - 690 - ] - }, - { - "teal": 570, - "source": 155, + "teal": 557, + "source": 144, "pc": [ + 690, 691 ] }, { - "teal": 571, - "source": 155, - "pc": [ - 692 - ] - }, - { - "teal": 572, - "source": 155, + "teal": 558, + "source": 144, "pc": [ + 692, 693 ] }, { - "teal": 575, - "source": 155, + "teal": 559, + "source": 144, "pc": [ 694, 695 ] }, { - "teal": 576, - "source": 155, - "pc": [ - 696 - ] - }, - { - "teal": 577, - "source": 155, + "teal": 560, + "source": 144, "pc": [ - 697 + 696, + 697, + 698 ] }, { - "teal": 578, - "source": 155, + "teal": 561, + "source": 144, "pc": [ - 698 + 699 ] }, { - "teal": 579, - "source": 155, + "teal": 562, + "source": 144, "pc": [ - 699, 700 ] }, { - "teal": 580, - "source": 155, + "teal": 563, + "source": 144, "pc": [ 701 ] }, { - "teal": 581, - "source": 155, + "teal": 564, + "source": 144, "pc": [ 702 ] }, { - "teal": 582, - "source": 155, - "pc": [ - 703 - ] - }, - { - "teal": 585, - "source": 155, + "teal": 567, + "source": 144, "pc": [ + 703, 704, - 705, - 706 + 705 ] }, { - "teal": 586, - "source": 155, + "teal": 572, + "source": 149, "pc": [ + 706, 707 ] }, { - "teal": 587, - "source": 155, - "pc": [ - 708 - ] - }, - { - "teal": 588, - "source": 155, + "teal": 573, + "source": 149, "pc": [ + 708, 709 ] }, { - "teal": 589, - "source": 155, + "teal": 574, + "source": 149, "pc": [ - 710 + 710, + 711 ] }, { - "teal": 601, - "source": 155, + "teal": 575, + "source": 149, "pc": [ - 711, 712, 713 ] }, { - "teal": 604, - "source": 155, + "teal": 576, + "source": 149, "pc": [ - 714 + 714, + 715, + 716 ] }, { - "teal": 605, - "source": 155, + "teal": 577, + "source": 149, "pc": [ - 715, - 716 + 717 ] }, { - "teal": 612, - "source": 156, + "teal": 578, + "source": 149, "pc": [ - 717, 718 ] }, { - "teal": 613, - "source": 157, + "teal": 579, + "source": 149, "pc": [ - 719, - 720 + 719 ] }, { - "teal": 614, - "source": 157, + "teal": 580, + "source": 149, + "pc": [ + 720, + 721 + ] + }, + { + "teal": 581, + "source": 149, "pc": [ - 721, 722 ] }, { - "teal": 615, - "source": 157, + "teal": 582, + "source": 149, "pc": [ 723 ] }, { - "teal": 616, - "source": 157, + "teal": 583, + "source": 149, "pc": [ - 724 + 724, + 725 ] }, { - "teal": 621, - "source": 161, + "teal": 587, + "source": 150, "pc": [ - 725, - 726 + 726, + 727 ] }, { - "teal": 622, - "source": 161, + "teal": 588, + "source": 150, "pc": [ - 727, - 728 + 728, + 729 ] }, { - "teal": 623, - "source": 161, + "teal": 589, + "source": 150, "pc": [ - 729, 730 ] }, { - "teal": 624, - "source": 161, + "teal": 590, + "source": 150, "pc": [ 731, 732 ] }, { - "teal": 625, - "source": 161, + "teal": 591, + "source": 150, "pc": [ - 733 + 733, + 734 ] }, { - "teal": 626, - "source": 161, + "teal": 592, + "source": 150, "pc": [ - 734 + 735 ] }, { - "teal": 627, - "source": 161, + "teal": 593, + "source": 150, "pc": [ - 735, - 736, - 737 + 736 ] }, { - "teal": 636, - "source": 162, + "teal": 594, + "source": 150, "pc": [ + 737, 738 ] }, { - "teal": 637, - "source": 162, + "teal": 595, + "source": 150, "pc": [ 739 ] }, { - "teal": 638, - "source": 162, + "teal": 596, + "source": 150, "pc": [ 740, 741 ] }, { - "teal": 642, - "source": 163, + "teal": 601, + "source": 151, "pc": [ 742, 743 ] }, { - "teal": 643, - "source": 163, + "teal": 602, + "source": 151, "pc": [ 744, 745 ] }, { - "teal": 647, - "source": 164, + "teal": 603, + "source": 151, "pc": [ 746, 747 ] }, { - "teal": 648, - "source": 164, + "teal": 604, + "source": 151, "pc": [ 748, 749 ] }, { - "teal": 649, - "source": 164, + "teal": 605, + "source": 151, "pc": [ 750, - 751 + 751, + 752 ] }, { - "teal": 653, - "source": 165, + "teal": 606, + "source": 151, "pc": [ - 752, 753 ] }, { - "teal": 654, - "source": 165, + "teal": 607, + "source": 151, "pc": [ - 754, - 755 + 754 ] }, { - "teal": 655, - "source": 165, + "teal": 608, + "source": 151, "pc": [ + 755, 756, 757 ] }, { - "teal": 658, - "source": 162, - "pc": [ - 758 - ] - }, - { - "teal": 659, - "source": 162, + "teal": 613, + "source": 152, "pc": [ - 759, - 760 + 758, + 759 ] }, { - "teal": 662, - "source": 162, + "teal": 614, + "source": 152, "pc": [ + 760, 761 ] }, { - "teal": 667, - "source": 168, + "teal": 615, + "source": 152, "pc": [ 762, 763 ] }, { - "teal": 668, - "source": 168, - "pc": [ - 764 - ] - }, - { - "teal": 669, - "source": 168, + "teal": 616, + "source": 152, "pc": [ + 764, 765 ] }, { - "teal": 670, - "source": 168, + "teal": 617, + "source": 152, "pc": [ 766, - 767, - 768 + 767 ] }, { - "teal": 678, - "source": 169, + "teal": 618, + "source": 152, "pc": [ + 768, 769 ] }, { - "teal": 679, - "source": 169, + "teal": 619, + "source": 152, "pc": [ - 770 + 770, + 771 ] }, { - "teal": 680, - "source": 169, + "teal": 620, + "source": 152, "pc": [ - 771, - 772 + 772, + 773, + 774 ] }, { - "teal": 684, - "source": 170, + "teal": 621, + "source": 152, "pc": [ - 773, - 774 + 775 ] }, { - "teal": 685, - "source": 170, + "teal": 622, + "source": 152, "pc": [ - 775, - 776 + 776, + 777 ] }, { - "teal": 689, - "source": 171, + "teal": 623, + "source": 152, "pc": [ - 777, 778 ] }, { - "teal": 690, - "source": 171, + "teal": 624, + "source": 152, "pc": [ - 779, - 780 + 779 ] }, { - "teal": 693, - "source": 169, + "teal": 625, + "source": 152, "pc": [ - 781 + 780 ] }, { - "teal": 694, - "source": 169, + "teal": 626, + "source": 152, "pc": [ - 782, - 783 + 781, + 782 ] }, { - "teal": 697, - "source": 169, + "teal": 633, + "source": 156, "pc": [ + 783, 784 ] }, { - "teal": 702, - "source": 175, + "teal": 637, + "source": 84, "pc": [ 785, 786 ] }, { - "teal": 703, - "source": 175, + "teal": 640, + "source": 84, "pc": [ 787, - 788, - 789 + 788 ] }, { - "teal": 708, - "source": 178, + "teal": 641, + "source": 84, "pc": [ - 790, - 791 + 789 ] }, { - "teal": 709, - "source": 178, + "teal": 646, + "source": 168, "pc": [ - 792 + 790 ] }, { - "teal": 710, - "source": 178, + "teal": 649, + "source": 168, "pc": [ + 791, + 792, 793 ] }, { - "teal": 711, - "source": 178, + "teal": 650, + "source": 168, "pc": [ 794 ] }, { - "teal": 712, - "source": 178, + "teal": 653, + "source": 168, "pc": [ 795, - 796 + 796, + 797 ] }, { - "teal": 716, - "source": 179, + "teal": 654, + "source": 168, "pc": [ - 797, 798 ] }, { - "teal": 717, - "source": 179, + "teal": 655, + "source": 168, + "pc": [ + 799 + ] + }, + { + "teal": 656, + "source": 168, + "pc": [ + 800 + ] + }, + { + "teal": 657, + "source": 168, "pc": [ - 799, - 800, 801 ] }, { - "teal": 718, - "source": 179, + "teal": 658, + "source": 168, "pc": [ - 802, - 803 + 802 ] }, { - "teal": 723, - "source": 181, + "teal": 661, + "source": 168, + "pc": [ + 803, + 804 + ] + }, + { + "teal": 662, + "source": 168, "pc": [ - 804, 805 ] }, { - "teal": 724, - "source": 181, + "teal": 663, + "source": 168, "pc": [ 806 ] }, { - "teal": 725, - "source": 181, + "teal": 664, + "source": 168, "pc": [ 807 ] }, { - "teal": 726, - "source": 181, + "teal": 665, + "source": 168, "pc": [ 808, - 809, + 809 + ] + }, + { + "teal": 666, + "source": 168, + "pc": [ 810 ] }, { - "teal": 734, - "source": 182, + "teal": 667, + "source": 168, "pc": [ 811 ] }, { - "teal": 735, - "source": 182, + "teal": 668, + "source": 168, "pc": [ 812 ] }, { - "teal": 736, - "source": 182, + "teal": 671, + "source": 168, "pc": [ 813, - 814 + 814, + 815 ] }, { - "teal": 740, - "source": 183, + "teal": 672, + "source": 168, "pc": [ - 815, 816 ] }, { - "teal": 741, - "source": 183, + "teal": 673, + "source": 168, + "pc": [ + 817 + ] + }, + { + "teal": 674, + "source": 168, "pc": [ - 817, 818 ] }, { - "teal": 745, - "source": 184, + "teal": 675, + "source": 168, "pc": [ - 819, - 820 + 819 ] }, { - "teal": 746, - "source": 184, + "teal": 687, + "source": 168, "pc": [ + 820, 821, 822 ] }, { - "teal": 749, - "source": 182, + "teal": 690, + "source": 168, "pc": [ 823 ] }, { - "teal": 750, - "source": 182, + "teal": 691, + "source": 168, "pc": [ 824, 825 ] }, { - "teal": 753, - "source": 182, + "teal": 698, + "source": 169, "pc": [ - 826 + 826, + 827 ] }, { - "teal": 759, - "source": 188, + "teal": 699, + "source": 170, "pc": [ - 827, - 828 + 828, + 829 ] }, { - "teal": 760, - "source": 188, + "teal": 700, + "source": 170, "pc": [ - 829, - 830 + 830, + 831 ] }, { - "teal": 761, - "source": 188, + "teal": 701, + "source": 170, "pc": [ - 831, 832 ] }, { - "teal": 762, - "source": 188, + "teal": 702, + "source": 170, "pc": [ - 833, - 834 + 833 ] }, { - "teal": 763, - "source": 188, + "teal": 707, + "source": 174, "pc": [ + 834, 835 ] }, { - "teal": 764, - "source": 188, + "teal": 708, + "source": 174, "pc": [ - 836 + 836, + 837 ] }, { - "teal": 765, - "source": 188, + "teal": 709, + "source": 174, "pc": [ - 837 + 838, + 839 ] }, { - "teal": 766, - "source": 188, + "teal": 710, + "source": 174, "pc": [ - 838, - 839, - 840 + 840, + 841 ] }, { - "teal": 771, - "source": 189, + "teal": 711, + "source": 174, "pc": [ - 841, 842 ] }, { - "teal": 772, - "source": 189, + "teal": 712, + "source": 174, "pc": [ - 843, - 844 + 843 ] }, { - "teal": 777, - "source": 190, + "teal": 713, + "source": 174, "pc": [ + 844, 845, 846 ] }, { - "teal": 778, - "source": 190, + "teal": 722, + "source": 175, "pc": [ 847 ] }, { - "teal": 779, - "source": 190, + "teal": 723, + "source": 175, + "pc": [ + 848 + ] + }, + { + "teal": 724, + "source": 175, "pc": [ - 848, 849, 850 ] }, { - "teal": 784, - "source": 190, + "teal": 728, + "source": 176, "pc": [ 851, 852 ] }, { - "teal": 785, - "source": 190, + "teal": 729, + "source": 176, "pc": [ 853, 854 ] }, { - "teal": 786, - "source": 190, - "pc": [ - 855 - ] - }, - { - "teal": 787, - "source": 190, + "teal": 733, + "source": 177, "pc": [ - 856, - 857 + 855, + 856 ] }, { - "teal": 793, - "source": 193, + "teal": 734, + "source": 177, "pc": [ - 858, - 859 + 857, + 858 ] }, { - "teal": 794, - "source": 193, + "teal": 735, + "source": 177, "pc": [ - 860, - 861 + 859, + 860 ] }, { - "teal": 795, - "source": 193, + "teal": 739, + "source": 178, "pc": [ + 861, 862 ] }, { - "teal": 796, - "source": 193, + "teal": 740, + "source": 178, "pc": [ 863, 864 ] }, { - "teal": 797, - "source": 193, + "teal": 741, + "source": 178, "pc": [ 865, 866 ] }, { - "teal": 798, - "source": 193, + "teal": 744, + "source": 175, "pc": [ 867 ] }, { - "teal": 799, - "source": 193, + "teal": 745, + "source": 175, "pc": [ 868, 869 ] }, { - "teal": 800, - "source": 193, + "teal": 748, + "source": 175, "pc": [ 870 ] }, { - "teal": 801, - "source": 193, + "teal": 753, + "source": 181, "pc": [ - 871 + 871, + 872 ] }, { - "teal": 802, - "source": 193, + "teal": 754, + "source": 181, "pc": [ - 872, - 873, - 874 + 873 ] }, { - "teal": 810, - "source": 194, + "teal": 755, + "source": 181, "pc": [ - 875 + 874 ] }, { - "teal": 811, - "source": 194, + "teal": 756, + "source": 181, "pc": [ - 876 + 875, + 876, + 877 ] }, { - "teal": 812, - "source": 194, + "teal": 764, + "source": 182, "pc": [ - 877, 878 ] }, { - "teal": 816, - "source": 195, + "teal": 765, + "source": 182, "pc": [ - 879, - 880 + 879 ] }, { - "teal": 817, - "source": 195, + "teal": 766, + "source": 182, "pc": [ - 881, - 882 + 880, + 881 ] }, { - "teal": 821, - "source": 196, + "teal": 770, + "source": 183, "pc": [ - 883, - 884 + 882, + 883 ] }, { - "teal": 822, - "source": 196, + "teal": 771, + "source": 183, "pc": [ - 885, - 886 + 884, + 885 ] }, { - "teal": 825, - "source": 194, + "teal": 775, + "source": 184, "pc": [ + 886, 887 ] }, { - "teal": 826, - "source": 194, + "teal": 776, + "source": 184, "pc": [ 888, 889 ] }, { - "teal": 829, - "source": 194, + "teal": 779, + "source": 182, "pc": [ 890 ] }, { - "teal": 839, - "source": 201, - "pc": [ - 891 - ] - }, - { - "teal": 840, - "source": 201, + "teal": 780, + "source": 182, "pc": [ + 891, 892 ] }, { - "teal": 841, - "source": 201, + "teal": 783, + "source": 182, "pc": [ - 893, - 894 + 893 ] }, { - "teal": 845, - "source": 202, + "teal": 788, + "source": 188, "pc": [ - 895, - 896 + 894, + 895 ] }, { - "teal": 846, - "source": 202, + "teal": 789, + "source": 188, "pc": [ + 896, 897, 898 ] }, { - "teal": 850, - "source": 203, + "teal": 794, + "source": 191, "pc": [ 899, 900 ] }, { - "teal": 851, - "source": 203, + "teal": 795, + "source": 191, + "pc": [ + 901 + ] + }, + { + "teal": 796, + "source": 191, "pc": [ - 901, 902 ] }, { - "teal": 855, - "source": 204, + "teal": 797, + "source": 191, "pc": [ 903 ] }, { - "teal": 856, - "source": 204, + "teal": 798, + "source": 191, "pc": [ 904, 905 ] }, { - "teal": 860, - "source": 205, + "teal": 802, + "source": 192, "pc": [ 906, 907 ] }, { - "teal": 861, - "source": 205, + "teal": 803, + "source": 192, "pc": [ 908, - 909 - ] - }, - { - "teal": 862, - "source": 205, - "pc": [ - 910, - 911 + 909, + 910 ] }, { - "teal": 865, - "source": 201, + "teal": 804, + "source": 192, "pc": [ + 911, 912 ] }, { - "teal": 866, - "source": 201, + "teal": 809, + "source": 194, "pc": [ 913, 914 ] }, { - "teal": 869, - "source": 201, + "teal": 810, + "source": 194, "pc": [ 915 ] }, { - "teal": 878, - "source": 210, + "teal": 811, + "source": 194, "pc": [ 916 ] }, { - "teal": 879, - "source": 210, + "teal": 812, + "source": 194, "pc": [ - 917 + 917, + 918, + 919 ] }, { - "teal": 880, - "source": 210, + "teal": 820, + "source": 195, "pc": [ - 918, - 919 + 920 ] }, { - "teal": 884, - "source": 211, + "teal": 821, + "source": 195, "pc": [ - 920, 921 ] }, { - "teal": 885, - "source": 211, + "teal": 822, + "source": 195, "pc": [ 922, 923 ] }, { - "teal": 889, - "source": 212, + "teal": 826, + "source": 196, "pc": [ 924, 925 ] }, { - "teal": 890, - "source": 212, + "teal": 827, + "source": 196, "pc": [ 926, 927 ] }, { - "teal": 891, - "source": 212, + "teal": 831, + "source": 197, "pc": [ 928, 929 ] }, { - "teal": 895, - "source": 213, + "teal": 832, + "source": 197, "pc": [ 930, 931 ] }, { - "teal": 896, - "source": 213, + "teal": 835, + "source": 195, "pc": [ - 932, - 933 + 932 ] }, { - "teal": 897, - "source": 213, + "teal": 836, + "source": 195, "pc": [ - 934, - 935 + 933, + 934 ] }, { - "teal": 900, - "source": 210, + "teal": 839, + "source": 195, "pc": [ - 936 + 935 ] }, { - "teal": 901, - "source": 210, + "teal": 845, + "source": 201, "pc": [ - 937, - 938 + 936, + 937 ] }, { - "teal": 904, - "source": 210, + "teal": 846, + "source": 201, "pc": [ + 938, 939 ] }, { - "teal": 908, - "source": 216, + "teal": 847, + "source": 201, "pc": [ 940, 941 ] }, { - "teal": 912, - "source": 155, + "teal": 848, + "source": 201, "pc": [ 942, 943 ] }, { - "teal": 915, - "source": 155, + "teal": 849, + "source": 201, + "pc": [ + 944 + ] + }, + { + "teal": 850, + "source": 201, "pc": [ - 944, 945 ] }, { - "teal": 916, - "source": 155, + "teal": 851, + "source": 201, "pc": [ 946 ] }, { - "teal": 921, - "source": 224, + "teal": 852, + "source": 201, "pc": [ 947, 948, @@ -3788,1418 +3782,1905 @@ ] }, { - "teal": 922, - "source": 224, + "teal": 857, + "source": 202, "pc": [ - 950 + 950, + 951 ] }, { - "teal": 925, - "source": 224, + "teal": 858, + "source": 202, "pc": [ - 951, 952, 953 ] }, { - "teal": 926, - "source": 224, - "pc": [ - 954 - ] - }, - { - "teal": 927, - "source": 224, + "teal": 863, + "source": 203, "pc": [ + 954, 955 ] }, { - "teal": 935, - "source": 224, + "teal": 864, + "source": 203, "pc": [ - 956, - 957, - 958 + 956 ] }, { - "teal": 938, - "source": 224, + "teal": 865, + "source": 203, "pc": [ + 957, + 958, 959 ] }, { - "teal": 942, - "source": 225, + "teal": 870, + "source": 203, "pc": [ 960, 961 ] }, { - "teal": 943, - "source": 225, - "pc": [ - 962 - ] - }, - { - "teal": 944, - "source": 225, + "teal": 871, + "source": 203, "pc": [ + 962, 963 ] }, { - "teal": 945, - "source": 225, + "teal": 872, + "source": 203, "pc": [ - 964, - 965 + 964 ] }, { - "teal": 955, - "source": 227, + "teal": 873, + "source": 203, "pc": [ + 965, 966 ] }, { - "teal": 956, - "source": 227, + "teal": 879, + "source": 206, "pc": [ - 967 + 967, + 968 ] }, { - "teal": 957, - "source": 227, + "teal": 880, + "source": 206, "pc": [ - 968, - 969 + 969, + 970 ] }, { - "teal": 961, - "source": 228, + "teal": 881, + "source": 206, "pc": [ - 970, 971 ] }, { - "teal": 962, - "source": 228, + "teal": 882, + "source": 206, "pc": [ 972, 973 ] }, { - "teal": 966, - "source": 229, + "teal": 883, + "source": 206, "pc": [ 974, 975 ] }, { - "teal": 967, - "source": 229, + "teal": 884, + "source": 206, "pc": [ - 976, - 977 + 976 ] }, { - "teal": 971, - "source": 230, + "teal": 885, + "source": 206, + "pc": [ + 977, + 978 + ] + }, + { + "teal": 886, + "source": 206, "pc": [ - 978, 979 ] }, { - "teal": 972, - "source": 230, + "teal": 887, + "source": 206, "pc": [ - 980, - 981 + 980 ] }, { - "teal": 973, - "source": 230, + "teal": 888, + "source": 206, "pc": [ + 981, 982, 983 ] }, { - "teal": 974, - "source": 230, + "teal": 896, + "source": 207, "pc": [ 984 ] }, { - "teal": 975, - "source": 230, + "teal": 897, + "source": 207, "pc": [ - 985, - 986 + 985 ] }, { - "teal": 979, - "source": 231, + "teal": 898, + "source": 207, "pc": [ - 987, - 988 + 986, + 987 ] }, { - "teal": 980, - "source": 231, + "teal": 902, + "source": 208, "pc": [ - 989, - 990 + 988, + 989 ] }, { - "teal": 984, - "source": 232, + "teal": 903, + "source": 208, "pc": [ - 991, - 992 + 990, + 991 ] }, { - "teal": 985, - "source": 232, + "teal": 907, + "source": 209, "pc": [ - 993, - 994 + 992, + 993 ] }, { - "teal": 988, - "source": 227, + "teal": 908, + "source": 209, "pc": [ + 994, 995 ] }, { - "teal": 989, - "source": 227, + "teal": 911, + "source": 207, "pc": [ - 996, - 997 + 996 ] }, { - "teal": 992, - "source": 227, + "teal": 912, + "source": 207, "pc": [ + 997, 998 ] }, { - "teal": 1000, - "source": 235, + "teal": 915, + "source": 207, "pc": [ 999 ] }, { - "teal": 1001, - "source": 235, + "teal": 925, + "source": 214, "pc": [ 1000 ] }, { - "teal": 1002, - "source": 235, + "teal": 926, + "source": 214, "pc": [ - 1001, - 1002 + 1001 ] }, { - "teal": 1006, - "source": 236, + "teal": 927, + "source": 214, "pc": [ - 1003, - 1004 + 1002, + 1003 ] }, { - "teal": 1007, - "source": 236, + "teal": 931, + "source": 215, "pc": [ - 1005, - 1006 + 1004, + 1005 ] }, { - "teal": 1011, - "source": 237, + "teal": 932, + "source": 215, "pc": [ - 1007, - 1008 + 1006, + 1007 ] }, { - "teal": 1012, - "source": 237, + "teal": 936, + "source": 216, "pc": [ - 1009, - 1010 + 1008, + 1009 ] }, { - "teal": 1016, - "source": 238, + "teal": 937, + "source": 216, "pc": [ - 1011, - 1012 + 1010, + 1011 ] }, { - "teal": 1017, - "source": 238, + "teal": 941, + "source": 217, "pc": [ - 1013, - 1014 + 1012 ] }, { - "teal": 1018, - "source": 238, + "teal": 942, + "source": 217, "pc": [ - 1015 + 1013, + 1014 ] }, { - "teal": 1019, - "source": 238, + "teal": 946, + "source": 218, "pc": [ - 1016, - 1017 + 1015, + 1016 ] }, { - "teal": 1020, - "source": 238, + "teal": 947, + "source": 218, "pc": [ - 1018, - 1019 + 1017, + 1018 ] }, { - "teal": 1021, - "source": 238, + "teal": 948, + "source": 218, "pc": [ + 1019, 1020 ] }, { - "teal": 1022, - "source": 238, + "teal": 951, + "source": 214, "pc": [ 1021 ] }, { - "teal": 1023, - "source": 238, + "teal": 952, + "source": 214, "pc": [ 1022, 1023 ] }, { - "teal": 1026, - "source": 235, + "teal": 955, + "source": 214, "pc": [ 1024 ] }, { - "teal": 1027, - "source": 235, + "teal": 964, + "source": 223, "pc": [ - 1025, - 1026 + 1025 ] }, { - "teal": 1030, - "source": 235, + "teal": 965, + "source": 223, "pc": [ - 1027 + 1026 ] }, { - "teal": 1031, - "source": 224, + "teal": 966, + "source": 223, "pc": [ + 1027, 1028 ] }, { - "teal": 1036, - "source": 248, + "teal": 970, + "source": 224, "pc": [ 1029, - 1030, - 1031 + 1030 ] }, { - "teal": 1037, - "source": 248, + "teal": 971, + "source": 224, "pc": [ + 1031, 1032 ] }, { - "teal": 1040, - "source": 248, + "teal": 975, + "source": 225, "pc": [ 1033, - 1034, - 1035 + 1034 ] }, { - "teal": 1041, - "source": 248, + "teal": 976, + "source": 225, "pc": [ + 1035, 1036 ] }, { - "teal": 1042, - "source": 248, + "teal": 977, + "source": 225, "pc": [ - 1037 + 1037, + 1038 ] }, { - "teal": 1051, - "source": 248, + "teal": 981, + "source": 226, "pc": [ - 1038, 1039, 1040 ] }, { - "teal": 1054, - "source": 248, - "pc": [ - 1041 - ] - }, - { - "teal": 1058, - "source": 249, + "teal": 982, + "source": 226, "pc": [ - 1042, - 1043 + 1041, + 1042 ] }, { - "teal": 1059, - "source": 249, + "teal": 983, + "source": 226, "pc": [ + 1043, 1044 ] }, { - "teal": 1060, - "source": 249, + "teal": 986, + "source": 223, "pc": [ 1045 ] }, { - "teal": 1061, - "source": 249, + "teal": 987, + "source": 223, "pc": [ 1046, 1047 ] }, { - "teal": 1071, - "source": 251, + "teal": 990, + "source": 223, "pc": [ 1048 ] }, { - "teal": 1072, - "source": 251, + "teal": 994, + "source": 229, "pc": [ - 1049 + 1049, + 1050 ] }, { - "teal": 1073, - "source": 251, + "teal": 998, + "source": 168, "pc": [ - 1050, - 1051 + 1051, + 1052 ] }, { - "teal": 1077, - "source": 252, + "teal": 1001, + "source": 168, "pc": [ - 1052, - 1053 + 1053, + 1054 ] }, { - "teal": 1078, - "source": 252, + "teal": 1002, + "source": 168, "pc": [ - 1054, 1055 ] }, { - "teal": 1082, - "source": 253, + "teal": 1007, + "source": 237, "pc": [ 1056, - 1057 + 1057, + 1058 ] }, { - "teal": 1083, - "source": 253, + "teal": 1008, + "source": 237, "pc": [ - 1058, 1059 ] }, { - "teal": 1084, - "source": 253, + "teal": 1011, + "source": 237, "pc": [ - 1060 + 1060, + 1061, + 1062 ] }, { - "teal": 1085, - "source": 253, + "teal": 1012, + "source": 237, "pc": [ - 1061, - 1062 + 1063 ] }, { - "teal": 1089, - "source": 254, + "teal": 1013, + "source": 237, "pc": [ - 1063, 1064 ] }, { - "teal": 1090, - "source": 254, + "teal": 1021, + "source": 237, "pc": [ 1065, - 1066 + 1066, + 1067 ] }, { - "teal": 1091, - "source": 254, + "teal": 1024, + "source": 237, "pc": [ - 1067, 1068 ] }, { - "teal": 1092, - "source": 254, + "teal": 1028, + "source": 238, "pc": [ - 1069 + 1069, + 1070 ] }, { - "teal": 1093, - "source": 254, + "teal": 1029, + "source": 238, "pc": [ - 1070, 1071 ] }, { - "teal": 1097, - "source": 255, + "teal": 1030, + "source": 238, "pc": [ - 1072, - 1073 + 1072 ] }, { - "teal": 1098, - "source": 255, + "teal": 1031, + "source": 238, "pc": [ - 1074, - 1075 + 1073, + 1074 ] }, { - "teal": 1102, - "source": 256, + "teal": 1041, + "source": 240, "pc": [ - 1076, - 1077 + 1075 ] }, { - "teal": 1103, - "source": 256, + "teal": 1042, + "source": 240, "pc": [ - 1078, - 1079 + 1076 ] }, { - "teal": 1104, - "source": 256, + "teal": 1043, + "source": 240, "pc": [ - 1080 + 1077, + 1078 ] }, { - "teal": 1105, - "source": 256, + "teal": 1047, + "source": 241, "pc": [ - 1081, - 1082 + 1079, + 1080 ] }, { - "teal": 1108, - "source": 251, + "teal": 1048, + "source": 241, "pc": [ - 1083 + 1081, + 1082 ] }, { - "teal": 1109, - "source": 251, + "teal": 1052, + "source": 242, "pc": [ - 1084, - 1085 + 1083, + 1084 ] }, { - "teal": 1112, - "source": 251, + "teal": 1053, + "source": 242, "pc": [ + 1085, 1086 ] }, { - "teal": 1120, - "source": 259, - "pc": [ - 1087 - ] - }, - { - "teal": 1121, - "source": 259, + "teal": 1057, + "source": 243, "pc": [ + 1087, 1088 ] }, { - "teal": 1122, - "source": 259, + "teal": 1058, + "source": 243, "pc": [ 1089, 1090 ] }, { - "teal": 1126, - "source": 260, + "teal": 1059, + "source": 243, "pc": [ 1091, 1092 ] }, { - "teal": 1127, - "source": 260, + "teal": 1060, + "source": 243, "pc": [ - 1093, - 1094 + 1093 ] }, { - "teal": 1131, - "source": 261, + "teal": 1061, + "source": 243, "pc": [ - 1095, - 1096 + 1094, + 1095 ] }, { - "teal": 1132, - "source": 261, + "teal": 1065, + "source": 244, "pc": [ - 1097, - 1098 + 1096, + 1097 ] }, { - "teal": 1136, - "source": 262, + "teal": 1066, + "source": 244, "pc": [ - 1099, - 1100 + 1098, + 1099 ] }, { - "teal": 1137, - "source": 262, + "teal": 1070, + "source": 245, "pc": [ - 1101, - 1102 + 1100, + 1101 ] }, { - "teal": 1138, - "source": 262, + "teal": 1071, + "source": 245, "pc": [ + 1102, 1103 ] }, { - "teal": 1139, - "source": 262, + "teal": 1074, + "source": 240, "pc": [ - 1104, - 1105 + 1104 ] }, { - "teal": 1140, - "source": 262, + "teal": 1075, + "source": 240, + "pc": [ + 1105, + 1106 + ] + }, + { + "teal": 1078, + "source": 240, "pc": [ - 1106, 1107 ] }, { - "teal": 1141, - "source": 262, + "teal": 1086, + "source": 248, "pc": [ 1108 ] }, { - "teal": 1142, - "source": 262, + "teal": 1087, + "source": 248, "pc": [ 1109 ] }, { - "teal": 1143, - "source": 262, + "teal": 1088, + "source": 248, "pc": [ 1110, 1111 ] }, { - "teal": 1146, - "source": 259, - "pc": [ - 1112 - ] - }, - { - "teal": 1147, - "source": 259, + "teal": 1092, + "source": 249, "pc": [ - 1113, - 1114 + 1112, + 1113 ] }, { - "teal": 1150, - "source": 259, + "teal": 1093, + "source": 249, "pc": [ + 1114, 1115 ] }, { - "teal": 1151, - "source": 248, - "pc": [ - 1116 - ] - }, - { - "teal": 1156, - "source": 273, + "teal": 1097, + "source": 250, "pc": [ + 1116, 1117 ] }, { - "teal": 1159, - "source": 273, + "teal": 1098, + "source": 250, "pc": [ 1118, - 1119, - 1120 + 1119 ] }, { - "teal": 1160, - "source": 273, + "teal": 1102, + "source": 251, "pc": [ + 1120, 1121 ] }, { - "teal": 1161, - "source": 273, - "pc": [ - 1122 - ] - }, - { - "teal": 1162, - "source": 273, + "teal": 1103, + "source": 251, "pc": [ + 1122, 1123 ] }, { - "teal": 1163, - "source": 273, + "teal": 1104, + "source": 251, "pc": [ 1124 ] }, { - "teal": 1164, - "source": 273, + "teal": 1105, + "source": 251, "pc": [ - 1125 + 1125, + 1126 ] }, { - "teal": 1167, - "source": 273, + "teal": 1106, + "source": 251, "pc": [ - 1126, 1127, 1128 ] }, { - "teal": 1168, - "source": 273, + "teal": 1107, + "source": 251, "pc": [ 1129 ] }, { - "teal": 1169, - "source": 273, + "teal": 1108, + "source": 251, "pc": [ 1130 ] }, { - "teal": 1170, - "source": 273, + "teal": 1109, + "source": 251, "pc": [ - 1131 + 1131, + 1132 ] }, { - "teal": 1171, - "source": 273, + "teal": 1112, + "source": 248, "pc": [ - 1132 + 1133 ] }, { - "teal": 1181, - "source": 273, + "teal": 1113, + "source": 248, "pc": [ - 1133, 1134, 1135 ] }, { - "teal": 1185, - "source": 274, + "teal": 1116, + "source": 248, "pc": [ - 1136, - 1137 + 1136 ] }, { - "teal": 1186, - "source": 274, + "teal": 1117, + "source": 237, "pc": [ - 1138 + 1137 ] }, { - "teal": 1187, - "source": 274, + "teal": 1122, + "source": 261, "pc": [ - 1139 + 1138, + 1139, + 1140 ] }, { - "teal": 1188, - "source": 274, + "teal": 1123, + "source": 261, "pc": [ - 1140 + 1141 ] }, { - "teal": 1189, - "source": 274, + "teal": 1126, + "source": 261, "pc": [ - 1141, 1142, - 1143 + 1143, + 1144 ] }, { - "teal": 1190, - "source": 274, + "teal": 1127, + "source": 261, "pc": [ - 1144, 1145 ] }, { - "teal": 1191, - "source": 274, + "teal": 1128, + "source": 261, "pc": [ 1146 ] }, { - "teal": 1192, - "source": 274, + "teal": 1137, + "source": 261, "pc": [ - 1147 + 1147, + 1148, + 1149 ] }, { - "teal": 1193, - "source": 274, + "teal": 1140, + "source": 261, "pc": [ - 1148, - 1149, 1150 ] }, { - "teal": 1196, - "source": 274, + "teal": 1144, + "source": 262, "pc": [ 1151, 1152 ] }, { - "teal": 1199, - "source": 273, + "teal": 1145, + "source": 262, "pc": [ 1153 ] }, { - "teal": 1204, - "source": 278, + "teal": 1146, + "source": 262, + "pc": [ + 1154 + ] + }, + { + "teal": 1147, + "source": 262, "pc": [ - 1154, 1155, 1156 ] }, { - "teal": 1205, - "source": 278, + "teal": 1157, + "source": 264, "pc": [ 1157 ] }, { - "teal": 1206, - "source": 278, + "teal": 1158, + "source": 264, "pc": [ 1158 ] }, { - "teal": 1212, - "source": 278, + "teal": 1159, + "source": 264, "pc": [ 1159, - 1160, - 1161 + 1160 ] }, { - "teal": 1215, - "source": 278, + "teal": 1163, + "source": 265, "pc": [ + 1161, 1162 ] }, { - "teal": 1219, - "source": 279, + "teal": 1164, + "source": 265, "pc": [ 1163, 1164 ] }, { - "teal": 1220, - "source": 279, - "pc": [ - 1165 - ] - }, - { - "teal": 1221, - "source": 279, + "teal": 1168, + "source": 266, "pc": [ + 1165, 1166 ] }, { - "teal": 1222, - "source": 279, + "teal": 1169, + "source": 266, "pc": [ 1167, 1168 ] }, { - "teal": 1226, - "source": 281, + "teal": 1170, + "source": 266, "pc": [ - 1169, - 1170 + 1169 ] }, { - "teal": 1227, - "source": 281, + "teal": 1171, + "source": 266, "pc": [ - 1171, - 1172 + 1170, + 1171 ] }, { - "teal": 1228, - "source": 281, + "teal": 1175, + "source": 267, "pc": [ + 1172, 1173 ] }, { - "teal": 1229, - "source": 281, + "teal": 1176, + "source": 267, "pc": [ 1174, 1175 ] }, { - "teal": 1230, - "source": 281, + "teal": 1177, + "source": 267, "pc": [ 1176, 1177 ] }, { - "teal": 1231, - "source": 281, + "teal": 1178, + "source": 267, "pc": [ 1178 ] }, { - "teal": 1232, - "source": 281, + "teal": 1179, + "source": 267, "pc": [ - 1179 + 1179, + 1180 ] }, { - "teal": 1233, - "source": 281, + "teal": 1183, + "source": 268, "pc": [ - 1180 + 1181, + 1182 ] }, { - "teal": 1234, - "source": 281, + "teal": 1184, + "source": 268, "pc": [ - 1181 + 1183, + 1184 ] }, { - "teal": 1235, - "source": 281, + "teal": 1188, + "source": 269, "pc": [ - 1182 + 1185, + 1186 ] }, { - "teal": 1243, - "source": 283, + "teal": 1189, + "source": 269, "pc": [ - 1183 + 1187, + 1188 ] }, { - "teal": 1244, - "source": 283, + "teal": 1190, + "source": 269, "pc": [ - 1184 + 1189 ] }, { - "teal": 1245, - "source": 283, + "teal": 1191, + "source": 269, "pc": [ - 1185, - 1186 + 1190, + 1191 ] }, { - "teal": 1249, - "source": 284, + "teal": 1194, + "source": 264, "pc": [ - 1187, - 1188 + 1192 ] }, { - "teal": 1250, - "source": 284, + "teal": 1195, + "source": 264, "pc": [ - 1189, - 1190 - ] - }, - { - "teal": 1254, - "source": 285, - "pc": [ - 1191, - 1192 + 1193, + 1194 ] }, { - "teal": 1255, - "source": 285, + "teal": 1198, + "source": 264, "pc": [ - 1193, - 1194 + 1195 ] }, { - "teal": 1259, - "source": 286, + "teal": 1206, + "source": 272, "pc": [ - 1195, 1196 ] }, { - "teal": 1260, - "source": 286, + "teal": 1207, + "source": 272, "pc": [ - 1197, - 1198 + 1197 ] }, { - "teal": 1261, - "source": 286, + "teal": 1208, + "source": 272, "pc": [ + 1198, 1199 ] }, { - "teal": 1262, - "source": 286, + "teal": 1212, + "source": 273, "pc": [ 1200, 1201 ] }, { - "teal": 1263, - "source": 286, + "teal": 1213, + "source": 273, "pc": [ 1202, 1203 ] }, { - "teal": 1264, - "source": 286, - "pc": [ - 1204 - ] - }, - { - "teal": 1265, - "source": 286, + "teal": 1217, + "source": 274, "pc": [ + 1204, 1205 ] }, { - "teal": 1266, - "source": 286, + "teal": 1218, + "source": 274, "pc": [ 1206, 1207 ] }, { - "teal": 1269, - "source": 283, + "teal": 1222, + "source": 275, "pc": [ - 1208 + 1208, + 1209 ] }, { - "teal": 1270, - "source": 283, + "teal": 1223, + "source": 275, "pc": [ - 1209, - 1210 + 1210, + 1211 ] }, { - "teal": 1273, - "source": 283, + "teal": 1224, + "source": 275, "pc": [ - 1211 + 1212 ] }, { - "teal": 1274, - "source": 278, + "teal": 1225, + "source": 275, "pc": [ - 1212 + 1213, + 1214 ] }, { - "teal": 1277, - "source": 33, + "teal": 1226, + "source": 275, "pc": [ - 1213, - 1214, 1215, - 1216, - 1217, + 1216 + ] + }, + { + "teal": 1227, + "source": 275, + "pc": [ + 1217 + ] + }, + { + "teal": 1228, + "source": 275, + "pc": [ 1218 ] }, { - "teal": 1278, - "source": 33, + "teal": 1229, + "source": 275, "pc": [ 1219, - 1220, + 1220 + ] + }, + { + "teal": 1232, + "source": 272, + "pc": [ 1221 ] }, { - "teal": 1279, - "source": 33, + "teal": 1233, + "source": 272, "pc": [ 1222, - 1223, - 1224, + 1223 + ] + }, + { + "teal": 1236, + "source": 272, + "pc": [ + 1224 + ] + }, + { + "teal": 1237, + "source": 261, + "pc": [ 1225 ] }, { - "teal": 1280, - "source": 33, + "teal": 1242, + "source": 286, "pc": [ 1226 ] }, { - "teal": 1283, - "source": 33, + "teal": 1245, + "source": 286, "pc": [ 1227, 1228, - 1229, - 1230, - 1231, + 1229 + ] + }, + { + "teal": 1246, + "source": 286, + "pc": [ + 1230 + ] + }, + { + "teal": 1247, + "source": 286, + "pc": [ + 1231 + ] + }, + { + "teal": 1248, + "source": 286, + "pc": [ 1232 ] }, { - "teal": 1284, - "source": 33, + "teal": 1249, + "source": 286, + "pc": [ + 1233 + ] + }, + { + "teal": 1250, + "source": 286, + "pc": [ + 1234 + ] + }, + { + "teal": 1253, + "source": 286, "pc": [ - 1233, - 1234, 1235, 1236, - 1237, + 1237 + ] + }, + { + "teal": 1254, + "source": 286, + "pc": [ 1238 ] }, { - "teal": 1285, - "source": 33, + "teal": 1255, + "source": 286, + "pc": [ + 1239 + ] + }, + { + "teal": 1256, + "source": 286, + "pc": [ + 1240 + ] + }, + { + "teal": 1257, + "source": 286, + "pc": [ + 1241 + ] + }, + { + "teal": 1267, + "source": 286, "pc": [ - 1239, - 1240, - 1241, 1242, 1243, 1244 ] }, { - "teal": 1286, - "source": 33, + "teal": 1271, + "source": 287, "pc": [ 1245, - 1246, - 1247, - 1248, - 1249, - 1250 + 1246 ] }, { - "teal": 1287, - "source": 33, + "teal": 1272, + "source": 287, + "pc": [ + 1247 + ] + }, + { + "teal": 1273, + "source": 287, + "pc": [ + 1248 + ] + }, + { + "teal": 1274, + "source": 287, + "pc": [ + 1249 + ] + }, + { + "teal": 1275, + "source": 287, "pc": [ + 1250, 1251, - 1252, + 1252 + ] + }, + { + "teal": 1276, + "source": 287, + "pc": [ 1253, - 1254, - 1255, + 1254 + ] + }, + { + "teal": 1277, + "source": 287, + "pc": [ + 1255 + ] + }, + { + "teal": 1278, + "source": 287, + "pc": [ 1256 ] }, { - "teal": 1288, - "source": 33, + "teal": 1279, + "source": 287, "pc": [ 1257, 1258, - 1259, + 1259 + ] + }, + { + "teal": 1282, + "source": 287, + "pc": [ 1260, - 1261, + 1261 + ] + }, + { + "teal": 1285, + "source": 286, + "pc": [ 1262 ] }, { - "teal": 1289, - "source": 33, + "teal": 1290, + "source": 291, "pc": [ 1263, 1264, - 1265, - 1266, - 1267, - 1268 + 1265 ] }, { - "teal": 1290, - "source": 33, + "teal": 1291, + "source": 291, + "pc": [ + 1266 + ] + }, + { + "teal": 1292, + "source": 291, "pc": [ + 1267 + ] + }, + { + "teal": 1298, + "source": 291, + "pc": [ + 1268, 1269, - 1270, - 1271, + 1270 + ] + }, + { + "teal": 1301, + "source": 291, + "pc": [ + 1271 + ] + }, + { + "teal": 1305, + "source": 292, + "pc": [ 1272, - 1273, + 1273 + ] + }, + { + "teal": 1306, + "source": 292, + "pc": [ 1274 ] }, { - "teal": 1291, - "source": 33, + "teal": 1307, + "source": 292, + "pc": [ + 1275 + ] + }, + { + "teal": 1308, + "source": 292, "pc": [ - 1275, 1276, 1277 ] }, { - "teal": 1292, - "source": 33, + "teal": 1312, + "source": 294, "pc": [ 1278, - 1279, + 1279 + ] + }, + { + "teal": 1313, + "source": 294, + "pc": [ 1280, - 1281, - 1282, + 1281 + ] + }, + { + "teal": 1314, + "source": 294, + "pc": [ + 1282 + ] + }, + { + "teal": 1315, + "source": 294, + "pc": [ 1283, - 1284, + 1284 + ] + }, + { + "teal": 1316, + "source": 294, + "pc": [ 1285, - 1286, - 1287, - 1288, - 1289, - 1290, - 1291, - 1292, - 1293, + 1286 + ] + }, + { + "teal": 1317, + "source": 294, + "pc": [ + 1287 + ] + }, + { + "teal": 1318, + "source": 294, + "pc": [ + 1288 + ] + }, + { + "teal": 1319, + "source": 294, + "pc": [ + 1289 + ] + }, + { + "teal": 1320, + "source": 294, + "pc": [ + 1290 + ] + }, + { + "teal": 1321, + "source": 294, + "pc": [ + 1291 + ] + }, + { + "teal": 1329, + "source": 296, + "pc": [ + 1292 + ] + }, + { + "teal": 1330, + "source": 296, + "pc": [ + 1293 + ] + }, + { + "teal": 1331, + "source": 296, + "pc": [ 1294, 1295 ] }, { - "teal": 1293, + "teal": 1335, + "source": 297, + "pc": [ + 1296, + 1297 + ] + }, + { + "teal": 1336, + "source": 297, + "pc": [ + 1298, + 1299 + ] + }, + { + "teal": 1340, + "source": 298, + "pc": [ + 1300, + 1301 + ] + }, + { + "teal": 1341, + "source": 298, + "pc": [ + 1302, + 1303 + ] + }, + { + "teal": 1345, + "source": 299, + "pc": [ + 1304, + 1305 + ] + }, + { + "teal": 1346, + "source": 299, + "pc": [ + 1306, + 1307 + ] + }, + { + "teal": 1347, + "source": 299, + "pc": [ + 1308 + ] + }, + { + "teal": 1348, + "source": 299, + "pc": [ + 1309, + 1310 + ] + }, + { + "teal": 1349, + "source": 299, + "pc": [ + 1311, + 1312 + ] + }, + { + "teal": 1350, + "source": 299, + "pc": [ + 1313 + ] + }, + { + "teal": 1351, + "source": 299, + "pc": [ + 1314 + ] + }, + { + "teal": 1352, + "source": 299, + "pc": [ + 1315, + 1316 + ] + }, + { + "teal": 1355, + "source": 296, + "pc": [ + 1317 + ] + }, + { + "teal": 1356, + "source": 296, + "pc": [ + 1318, + 1319 + ] + }, + { + "teal": 1359, + "source": 296, + "pc": [ + 1320 + ] + }, + { + "teal": 1360, + "source": 291, + "pc": [ + 1321 + ] + }, + { + "teal": 1363, + "source": 33, + "pc": [ + 1322, + 1323, + 1324, + 1325, + 1326, + 1327 + ] + }, + { + "teal": 1364, + "source": 33, + "pc": [ + 1328, + 1329, + 1330 + ] + }, + { + "teal": 1365, + "source": 33, + "pc": [ + 1331, + 1332, + 1333, + 1334 + ] + }, + { + "teal": 1366, + "source": 33, + "pc": [ + 1335 + ] + }, + { + "teal": 1369, + "source": 33, + "pc": [ + 1336, + 1337, + 1338, + 1339, + 1340, + 1341 + ] + }, + { + "teal": 1370, + "source": 33, + "pc": [ + 1342, + 1343, + 1344, + 1345, + 1346, + 1347 + ] + }, + { + "teal": 1371, + "source": 33, + "pc": [ + 1348, + 1349, + 1350, + 1351, + 1352, + 1353 + ] + }, + { + "teal": 1372, + "source": 33, + "pc": [ + 1354, + 1355, + 1356, + 1357, + 1358, + 1359 + ] + }, + { + "teal": 1373, + "source": 33, + "pc": [ + 1360, + 1361, + 1362, + 1363, + 1364, + 1365 + ] + }, + { + "teal": 1374, + "source": 33, + "pc": [ + 1366, + 1367, + 1368, + 1369, + 1370, + 1371 + ] + }, + { + "teal": 1375, + "source": 33, + "pc": [ + 1372, + 1373, + 1374, + 1375, + 1376, + 1377 + ] + }, + { + "teal": 1376, + "source": 33, + "pc": [ + 1378, + 1379, + 1380, + 1381, + 1382, + 1383 + ] + }, + { + "teal": 1377, + "source": 33, + "pc": [ + 1384, + 1385, + 1386 + ] + }, + { + "teal": 1378, + "source": 33, + "pc": [ + 1387, + 1388, + 1389, + 1390, + 1391, + 1392, + 1393, + 1394, + 1395, + 1396, + 1397, + 1398, + 1399, + 1400, + 1401, + 1402, + 1403, + 1404 + ] + }, + { + "teal": 1379, "source": 33, "pc": [ - 1296 + 1405 ] } ] \ No newline at end of file diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal index c69eb4416..101c16133 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal @@ -230,7 +230,7 @@ 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 // routerOptedIn = this.app.address.isOptedInToAsset(asset) @@ -542,7 +542,93 @@ arc59_getSendAssetInfo: *if6_end: *if5_end: - // contracts/arc59.algo.ts:143 + // *if7_condition + // contracts/arc59.algo.ts:144 + // 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:149 + // 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:150 + // inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim + frame_dig 6 // inbox: address + acct_params_get AcctBalance + pop + frame_dig 6 // inbox: address + acct_params_get AcctMinBalance + pop + - + frame_dig 7 // algoConsumedByClaim: uint64 + - + frame_bury 8 // inboxAlgoAvailable: uint64 + + // *if8_condition + // contracts/arc59.algo.ts:151 + // 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:152 + // 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:156 // return info; frame_dig 2 // info: SendAssetInfo @@ -551,7 +637,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 +690,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:156 + // contracts/arc59.algo.ts:169 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -615,8 +701,8 @@ arc59_sendAsset: == assert - // *if7_condition - // contracts/arc59.algo.ts:161 + // *if9_condition + // contracts/arc59.algo.ts:174 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -624,10 +710,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:175 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -637,18 +723,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:163 + // contracts/arc59.algo.ts:176 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:164 + // contracts/arc59.algo.ts:177 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:165 + // contracts/arc59.algo.ts:178 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -661,16 +747,16 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // *if8_condition - // contracts/arc59.algo.ts:168 + // *if10_condition + // contracts/arc59.algo.ts:181 // 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:182 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -679,12 +765,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:170 + // contracts/arc59.algo.ts:183 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:171 + // contracts/arc59.algo.ts:184 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -696,14 +782,14 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if8_end: - // contracts/arc59.algo.ts:175 +*if10_end: + // contracts/arc59.algo.ts:188 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return -*if7_end: - // contracts/arc59.algo.ts:178 +*if9_end: + // contracts/arc59.algo.ts:191 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -711,22 +797,22 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:179 + // contracts/arc59.algo.ts:192 // 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 + // *if11_condition + // contracts/arc59.algo.ts:194 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 != - bz *if9_end + bz *if11_end - // *if9_consequent - // contracts/arc59.algo.ts:182 + // *if11_consequent + // contracts/arc59.algo.ts:195 // sendPayment({ // receiver: inbox, // amount: additionalReceiverFunds, @@ -735,12 +821,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:183 + // contracts/arc59.algo.ts:196 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:184 + // contracts/arc59.algo.ts:197 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -752,9 +838,9 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if9_end: - // *if10_condition - // contracts/arc59.algo.ts:188 +*if11_end: + // *if12_condition + // contracts/arc59.algo.ts:201 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -763,32 +849,32 @@ arc59_sendAsset: swap pop ! - bz *if10_end + bz *if12_end - // *if10_consequent - // contracts/arc59.algo.ts:189 + // *if12_consequent + // contracts/arc59.algo.ts:202 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if11_condition - // contracts/arc59.algo.ts:190 + // *if13_condition + // contracts/arc59.algo.ts:203 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if11_end + bz *if13_end - // *if11_consequent - // contracts/arc59.algo.ts:190 + // *if13_consequent + // contracts/arc59.algo.ts:203 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:193 +*if13_end: + // *if14_condition + // contracts/arc59.algo.ts:206 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -799,10 +885,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if12_end + bz *if14_end - // *if12_consequent - // contracts/arc59.algo.ts:194 + // *if14_consequent + // contracts/arc59.algo.ts:207 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -811,12 +897,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:208 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:196 + // contracts/arc59.algo.ts:209 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -828,8 +914,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:201 +*if14_end: + // contracts/arc59.algo.ts:214 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -840,22 +926,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:202 + // contracts/arc59.algo.ts:215 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:216 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:204 + // contracts/arc59.algo.ts:217 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:205 + // contracts/arc59.algo.ts:218 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -868,8 +954,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if10_end: - // contracts/arc59.algo.ts:210 +*if12_end: + // contracts/arc59.algo.ts:223 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -879,18 +965,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:211 + // contracts/arc59.algo.ts:224 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:212 + // contracts/arc59.algo.ts:225 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:226 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -903,7 +989,7 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:216 + // contracts/arc59.algo.ts:229 // return inbox; frame_dig 1 // inbox: address @@ -937,14 +1023,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:238 // 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:240 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -956,17 +1042,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:228 + // contracts/arc59.algo.ts:241 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:242 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:243 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -974,12 +1060,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:244 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:232 + // contracts/arc59.algo.ts:245 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -991,7 +1077,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:235 + // contracts/arc59.algo.ts:248 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1001,17 +1087,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:236 + // contracts/arc59.algo.ts:249 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:237 + // contracts/arc59.algo.ts:250 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:238 + // contracts/arc59.algo.ts:251 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1053,14 +1139,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:262 // 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:264 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1072,19 +1158,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:252 + // contracts/arc59.algo.ts:265 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:253 + // contracts/arc59.algo.ts:266 // 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:267 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1092,12 +1178,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:255 + // contracts/arc59.algo.ts:268 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:256 + // contracts/arc59.algo.ts:269 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1111,7 +1197,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:259 + // contracts/arc59.algo.ts:272 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1121,17 +1207,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:260 + // contracts/arc59.algo.ts:273 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:261 + // contracts/arc59.algo.ts:274 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:262 + // contracts/arc59.algo.ts:275 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1180,7 +1266,7 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:274 + // contracts/arc59.algo.ts:287 // return this.inboxes(receiver).exists ? this.inboxes(receiver).value : globals.zeroAddress; frame_dig -1 // receiver: Address box_len @@ -1214,14 +1300,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:292 // 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:294 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1234,7 +1320,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:283 + // contracts/arc59.algo.ts:296 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1244,17 +1330,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:284 + // contracts/arc59.algo.ts:297 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:285 + // contracts/arc59.algo.ts:298 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:286 + // contracts/arc59.algo.ts:299 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json index 6f499b93c..626fbbbe5 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo0OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDYKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MwoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA2CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjMKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2NAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjgKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcwCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzUKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjlfZW5kOgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgxCgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo0OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDQKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ5CgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUwCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTEKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NAoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzYKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTIKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQyCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjIKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY2CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg3CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTQKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTgKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json index 80d01ca8b..4e49ef8eb 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, "source": 8, "pc": [ - 312, 313, 314, 315, @@ -998,74 +998,74 @@ 326, 327, 328, - 329 + 329, + 330 ] }, { "teal": 262, "source": 8, "pc": [ - 330, 331, - 332 + 332, + 333 ] }, { "teal": 263, "source": 8, "pc": [ - 333 + 334 ] }, { "teal": 264, "source": 8, "pc": [ - 334, - 335 + 335, + 336 ] }, { "teal": 265, "source": 8, "pc": [ - 336 + 337 ] }, { "teal": 266, "source": 8, "pc": [ - 337 + 338 ] }, { "teal": 267, "source": 8, "pc": [ - 338, - 339 + 339, + 340 ] }, { "teal": 268, "source": 8, "pc": [ - 340 + 341 ] }, { "teal": 269, "source": 8, "pc": [ - 341 + 342 ] }, { "teal": 270, "source": 8, "pc": [ - 342, 343, 344, 345, @@ -1074,1559 +1074,1547 @@ 348, 349, 350, - 351 + 351, + 352 ] }, { "teal": 271, "source": 8, "pc": [ - 352 + 353 ] }, { "teal": 272, "source": 8, "pc": [ - 353, - 354 + 354, + 355 ] }, { "teal": 277, "source": 8, "pc": [ - 355, - 356 + 356, + 357 ] }, { "teal": 278, "source": 8, "pc": [ - 357, 358, - 359 + 359, + 360 ] }, { "teal": 283, "source": 8, "pc": [ - 360, - 361 + 361, + 362 ] }, { "teal": 284, "source": 8, "pc": [ - 362, 363, - 364 + 364, + 365 ] }, { "teal": 289, "source": 8, "pc": [ - 365, - 366 + 366, + 367 ] }, { "teal": 290, "source": 8, "pc": [ - 367, - 368 + 368, + 369 ] }, { "teal": 291, "source": 8, "pc": [ - 369 + 370 ] }, { "teal": 292, "source": 8, "pc": [ - 370, - 371 + 371, + 372 ] }, { "teal": 293, "source": 8, "pc": [ - 372 + 373 ] }, { "teal": 294, "source": 8, "pc": [ - 373, - 374 + 374, + 375 ] }, { "teal": 295, "source": 8, "pc": [ - 375 + 376 ] }, { "teal": 296, "source": 8, "pc": [ - 376, - 377 + 377, + 378 ] }, { "teal": 301, "source": 8, "pc": [ - 378, - 379 + 379, + 380 ] }, { "teal": 302, "source": 8, "pc": [ - 380, - 381 + 381, + 382 ] }, { "teal": 303, "source": 8, "pc": [ - 382 + 383 ] }, { "teal": 304, "source": 8, "pc": [ - 383, - 384 + 384, + 385 ] }, { "teal": 305, "source": 8, "pc": [ - 385 + 386 ] }, { "teal": 306, "source": 8, "pc": [ - 386, 387, - 388 + 388, + 389 ] }, { "teal": 311, "source": 8, "pc": [ - 389, - 390 + 390, + 391 ] }, { "teal": 312, "source": 8, "pc": [ - 391, - 392 + 392, + 393 ] }, { "teal": 313, "source": 8, "pc": [ - 393, - 394 + 394, + 395 ] }, { "teal": 314, "source": 8, "pc": [ - 395, - 396 + 396, + 397 ] }, { "teal": 315, "source": 8, "pc": [ - 397, - 398 + 398, + 399 ] }, { "teal": 316, "source": 8, "pc": [ - 399, - 400 + 400, + 401 ] }, { "teal": 317, "source": 8, "pc": [ - 401, - 402 + 402, + 403 ] }, { "teal": 318, "source": 8, "pc": [ - 403, 404, - 405 + 405, + 406 ] }, { "teal": 319, "source": 8, "pc": [ - 406 + 407 ] }, { "teal": 320, "source": 8, "pc": [ - 407, - 408 + 408, + 409 ] }, { "teal": 321, "source": 8, "pc": [ - 409, - 410 + 410, + 411 ] }, { "teal": 322, "source": 8, "pc": [ - 411, - 412 + 412, + 413 ] }, { "teal": 323, "source": 8, "pc": [ - 413 + 414 ] }, { "teal": 324, "source": 8, "pc": [ - 414 + 415 ] }, { "teal": 325, "source": 8, "pc": [ - 415 + 416 ] }, { "teal": 326, "source": 8, "pc": [ - 416 + 417 ] }, { "teal": 327, "source": 8, "pc": [ - 417 + 418 ] }, { "teal": 328, "source": 8, "pc": [ - 418, - 419 + 419, + 420 ] }, { "teal": 334, "source": 8, "pc": [ - 420, - 421 + 421, + 422 ] }, { "teal": 335, "source": 8, "pc": [ - 422 + 423 ] }, { "teal": 336, "source": 8, "pc": [ - 423, 424, - 425 + 425, + 426 ] }, { "teal": 341, "source": 8, "pc": [ - 426, - 427 + 427, + 428 ] }, { "teal": 342, "source": 8, "pc": [ - 428, - 429 + 429, + 430 ] }, { "teal": 343, "source": 8, "pc": [ - 430, - 431 + 431, + 432 ] }, { "teal": 344, "source": 8, "pc": [ - 432, - 433 + 433, + 434 ] }, { "teal": 345, "source": 8, "pc": [ - 434, - 435 + 435, + 436 ] }, { "teal": 346, "source": 8, "pc": [ - 436, - 437 + 437, + 438 ] }, { "teal": 347, "source": 8, "pc": [ - 438, - 439 + 439, + 440 ] }, { "teal": 348, "source": 8, "pc": [ - 440, 441, - 442 + 442, + 443 ] }, { "teal": 349, "source": 8, "pc": [ - 443 + 444 ] }, { "teal": 350, "source": 8, "pc": [ - 444, - 445 + 445, + 446 ] }, { "teal": 351, "source": 8, "pc": [ - 446 + 447 ] }, { "teal": 352, "source": 8, "pc": [ - 447 + 448 ] }, { "teal": 353, "source": 8, "pc": [ - 448 + 449 ] }, { "teal": 354, "source": 8, "pc": [ - 449, - 450 + 450, + 451 ] }, { "teal": 358, "source": 8, "pc": [ - 451, - 452 + 452, + 453 ] }, { "teal": 359, "source": 8, "pc": [ - 453, - 454 + 454, + 455 ] }, { "teal": 360, "source": 8, "pc": [ - 455, - 456 + 456, + 457 ] }, { "teal": 361, "source": 8, "pc": [ - 457 + 458 ] }, { "teal": 362, "source": 8, "pc": [ - 458, - 459 + 459, + 460 ] }, { "teal": 363, "source": 8, "pc": [ - 460, - 461 + 461, + 462 ] }, { "teal": 364, "source": 8, "pc": [ - 462, - 463 + 463, + 464 ] }, { "teal": 365, "source": 8, "pc": [ - 464, 465, - 466 + 466, + 467 ] }, { "teal": 366, "source": 8, "pc": [ - 467 + 468 ] }, { "teal": 367, "source": 8, "pc": [ - 468 + 469 ] }, { "teal": 368, "source": 8, "pc": [ - 469 + 470 ] }, { "teal": 369, "source": 8, "pc": [ - 470 + 471 ] }, { "teal": 370, "source": 8, "pc": [ - 471 + 472 ] }, { "teal": 371, "source": 8, "pc": [ - 472, - 473 + 473, + 474 ] }, { "teal": 377, "source": 8, "pc": [ - 474, - 475 + 475, + 476 ] }, { "teal": 378, "source": 8, "pc": [ - 476 + 477 ] }, { "teal": 379, "source": 8, "pc": [ - 477 + 478 ] }, { "teal": 380, "source": 8, "pc": [ - 478 + 479 ] }, { "teal": 381, "source": 8, "pc": [ - 479 + 480 ] }, { "teal": 382, "source": 8, "pc": [ - 480, 481, - 482 + 482, + 483 ] }, { "teal": 387, "source": 8, "pc": [ - 483, - 484 + 484, + 485 ] }, { "teal": 388, "source": 8, "pc": [ - 485, - 486 + 486, + 487 ] }, { "teal": 389, "source": 8, "pc": [ - 487, - 488 + 488, + 489 ] }, { "teal": 390, "source": 8, "pc": [ - 489 + 490 ] }, { "teal": 391, "source": 8, "pc": [ - 490, - 491 + 491, + 492 ] }, { "teal": 392, "source": 8, "pc": [ - 492, - 493 + 493, + 494 ] }, { "teal": 393, "source": 8, "pc": [ - 494, - 495 + 495, + 496 ] }, { "teal": 394, "source": 8, "pc": [ - 496, 497, - 498 + 498, + 499 ] }, { "teal": 395, "source": 8, "pc": [ - 499 + 500 ] }, { "teal": 396, "source": 8, "pc": [ - 500 + 501 ] }, { "teal": 397, "source": 8, "pc": [ - 501 + 502 ] }, { "teal": 398, "source": 8, "pc": [ - 502 + 503 ] }, { "teal": 399, "source": 8, "pc": [ - 503 + 504 ] }, { "teal": 400, "source": 8, "pc": [ - 504, - 505 + 505, + 506 ] }, { "teal": 404, "source": 8, "pc": [ - 506, - 507 + 507, + 508 ] }, { "teal": 405, "source": 8, "pc": [ - 508, - 509 + 509, + 510 ] }, { "teal": 406, "source": 8, "pc": [ - 510 + 511 ] }, { "teal": 407, "source": 8, "pc": [ - 511, - 512 + 512, + 513 ] }, { "teal": 411, "source": 8, "pc": [ - 513, - 514 + 514, + 515 ] }, { "teal": 412, "source": 8, "pc": [ - 515, - 516 + 516, + 517 ] }, { "teal": 413, "source": 8, "pc": [ - 517 + 518 ] }, { "teal": 417, "source": 8, "pc": [ - 518, - 519 + 519, + 520 ] }, { "teal": 418, "source": 8, "pc": [ - 520, - 521 + 521, + 522 ] }, { "teal": 419, "source": 8, "pc": [ - 522 + 523 ] }, { "teal": 420, "source": 8, "pc": [ - 523, - 524 + 524, + 525 ] }, { "teal": 421, "source": 8, "pc": [ - 525 + 526 ] }, { "teal": 422, "source": 8, "pc": [ - 526, - 527 + 527, + 528 ] }, { "teal": 426, "source": 8, "pc": [ - 528, - 529 + 529, + 530 ] }, { "teal": 427, "source": 8, "pc": [ - 530 + 531 ] }, { "teal": 431, "source": 8, "pc": [ - 531, - 532 + 532, + 533 ] }, { "teal": 432, "source": 8, "pc": [ - 533, - 534 + 534, + 535 ] }, { "teal": 433, "source": 8, "pc": [ - 535, - 536 + 536, + 537 ] }, { "teal": 434, "source": 8, "pc": [ - 537, - 538 + 538, + 539 ] }, { "teal": 435, "source": 8, "pc": [ - 539, - 540 + 540, + 541 ] }, { "teal": 436, "source": 8, "pc": [ - 541, - 542 + 542, + 543 ] }, { "teal": 437, "source": 8, "pc": [ - 543, - 544 + 544, + 545 ] }, { "teal": 438, "source": 8, "pc": [ - 545, 546, - 547 + 547, + 548 ] }, { "teal": 439, "source": 8, "pc": [ - 548 + 549 ] }, { "teal": 440, "source": 8, "pc": [ - 549, - 550 + 550, + 551 ] }, { "teal": 441, "source": 8, "pc": [ - 551, - 552 + 552, + 553 ] }, { "teal": 442, "source": 8, "pc": [ - 553 + 554 ] }, { "teal": 443, "source": 8, "pc": [ - 554, - 555 + 555, + 556 ] }, { "teal": 444, "source": 8, "pc": [ - 556 + 557 ] }, { "teal": 445, "source": 8, "pc": [ - 557 + 558 ] }, { "teal": 446, "source": 8, "pc": [ - 558 + 559 ] }, { "teal": 447, "source": 8, "pc": [ - 559 + 560 ] }, { "teal": 448, "source": 8, "pc": [ - 560, - 561 + 561, + 562 ] }, { "teal": 452, "source": 8, "pc": [ - 562, - 563 + 563, + 564 ] }, { "teal": 453, "source": 8, "pc": [ - 564, 565, - 566 + 566, + 567 ] }, { "teal": 458, "source": 8, "pc": [ - 567, - 568 + 568, + 569 ] }, { "teal": 459, "source": 8, "pc": [ - 569 + 570 ] }, { "teal": 460, "source": 8, "pc": [ - 570 + 571 ] }, { "teal": 461, "source": 8, "pc": [ - 571, - 572 + 572, + 573 ] }, { "teal": 466, "source": 8, "pc": [ - 573, - 574 + 574, + 575 ] }, { "teal": 467, "source": 8, "pc": [ - 575, - 576 + 576, + 577 ] }, { "teal": 468, "source": 8, "pc": [ - 577, - 578 + 578, + 579 ] }, { "teal": 469, "source": 8, "pc": [ - 579 + 580 ] }, { "teal": 470, "source": 8, "pc": [ - 580 + 581 ] }, { "teal": 471, "source": 8, "pc": [ - 581 + 582 ] }, { "teal": 472, "source": 8, "pc": [ - 582, 583, - 584 + 584, + 585 ] }, { "teal": 477, "source": 8, "pc": [ - 585, - 586 + 586, + 587 ] }, { "teal": 478, "source": 8, "pc": [ - 587, - 588 + 588, + 589 ] }, { "teal": 479, "source": 8, "pc": [ - 589, - 590 + 590, + 591 ] }, { "teal": 480, "source": 8, "pc": [ - 591 + 592 ] }, { "teal": 481, "source": 8, "pc": [ - 592, - 593 + 593, + 594 ] }, { "teal": 482, "source": 8, "pc": [ - 594, - 595 + 595, + 596 ] }, { "teal": 483, "source": 8, "pc": [ - 596, - 597 + 597, + 598 ] }, { "teal": 484, "source": 8, "pc": [ - 598, 599, - 600 + 600, + 601 ] }, { "teal": 485, "source": 8, "pc": [ - 601 + 602 ] }, { "teal": 486, "source": 8, "pc": [ - 602 + 603 ] }, { "teal": 487, "source": 8, "pc": [ - 603 + 604 ] }, { "teal": 488, "source": 8, "pc": [ - 604 + 605 ] }, { "teal": 489, "source": 8, "pc": [ - 605 + 606 ] }, { "teal": 490, "source": 8, "pc": [ - 606, - 607 + 607, + 608 ] }, { "teal": 495, "source": 8, "pc": [ - 608, - 609 + 609, + 610 ] }, { "teal": 496, "source": 8, "pc": [ - 610, - 611 + 611, + 612 ] }, { "teal": 497, "source": 8, "pc": [ - 612 + 613 ] }, { "teal": 498, "source": 8, "pc": [ - 613, - 614 + 614, + 615 ] }, { "teal": 499, "source": 8, "pc": [ - 615, - 616 + 616, + 617 ] }, { "teal": 500, "source": 8, "pc": [ - 617 + 618 ] }, { "teal": 501, "source": 8, "pc": [ - 618, - 619 + 619, + 620 ] }, { "teal": 502, "source": 8, "pc": [ - 620 + 621 ] }, { "teal": 503, "source": 8, "pc": [ - 621 + 622 ] }, { "teal": 504, "source": 8, "pc": [ - 622 + 623 ] }, { "teal": 505, "source": 8, "pc": [ - 623, 624, - 625 + 625, + 626 ] }, { "teal": 510, "source": 8, "pc": [ - 626, - 627 + 627, + 628 ] }, { "teal": 511, "source": 8, "pc": [ - 628, - 629 + 629, + 630 ] }, { "teal": 512, "source": 8, "pc": [ - 630, - 631 + 631, + 632 ] }, { "teal": 513, "source": 8, "pc": [ - 632 + 633 ] }, { "teal": 514, "source": 8, "pc": [ - 633, - 634 + 634, + 635 ] }, { "teal": 515, "source": 8, "pc": [ - 635, - 636 + 636, + 637 ] }, { "teal": 516, "source": 8, "pc": [ - 637, - 638 + 638, + 639 ] }, { "teal": 517, "source": 8, "pc": [ - 639, 640, - 641 + 641, + 642 ] }, { "teal": 518, "source": 8, "pc": [ - 642 + 643 ] }, { "teal": 519, "source": 8, "pc": [ - 643 + 644 ] }, { "teal": 520, "source": 8, "pc": [ - 644 + 645 ] }, { "teal": 521, "source": 8, "pc": [ - 645 + 646 ] }, { "teal": 522, "source": 8, "pc": [ - 646 + 647 ] }, { "teal": 523, "source": 8, "pc": [ - 647, - 648 + 648, + 649 ] }, { "teal": 527, "source": 8, "pc": [ - 649, - 650 + 650, + 651 ] }, { "teal": 528, "source": 8, "pc": [ - 651, - 652 + 652, + 653 ] }, { "teal": 529, "source": 8, "pc": [ - 653, - 654 + 654, + 655 ] }, { "teal": 530, "source": 8, "pc": [ - 655, - 656 + 656, + 657 ] }, { "teal": 531, "source": 8, "pc": [ - 657, - 658 + 658, + 659 ] }, { "teal": 532, "source": 8, "pc": [ - 659, - 660 + 660, + 661 ] }, { "teal": 533, "source": 8, "pc": [ - 661, - 662 + 662, + 663 ] }, { "teal": 534, "source": 8, "pc": [ - 663, 664, - 665 + 665, + 666 ] }, { "teal": 535, "source": 8, "pc": [ - 666 + 667 ] }, { "teal": 536, "source": 8, "pc": [ - 667, - 668 + 668, + 669 ] }, { "teal": 537, "source": 8, "pc": [ - 669 + 670 ] }, { "teal": 538, "source": 8, "pc": [ - 670 + 671 ] }, { "teal": 539, "source": 8, "pc": [ - 671 + 672 ] }, { "teal": 540, "source": 8, "pc": [ - 672, - 673 + 673, + 674 ] }, { - "teal": 547, + "teal": 548, "source": 8, "pc": [ - 674, - 675 + 675, + 676 ] }, { - "teal": 551, + "teal": 549, "source": 8, "pc": [ - 676, - 677 + 677, + 678 ] }, { - "teal": 554, + "teal": 550, "source": 8, "pc": [ - 678, 679 ] }, { - "teal": 555, + "teal": 551, "source": 8, "pc": [ - 680 + 680, + 681 ] }, { - "teal": 560, + "teal": 552, "source": 8, "pc": [ - 681 + 682, + 683 ] }, { - "teal": 563, + "teal": 553, "source": 8, "pc": [ - 682, - 683, 684 ] }, { - "teal": 564, + "teal": 554, "source": 8, "pc": [ 685 ] }, { - "teal": 567, + "teal": 555, "source": 8, "pc": [ - 686, - 687, - 688 + 686 ] }, { - "teal": 568, + "teal": 556, "source": 8, "pc": [ + 687, + 688, 689 ] }, { - "teal": 569, - "source": 8, - "pc": [ - 690 - ] - }, - { - "teal": 570, + "teal": 557, "source": 8, "pc": [ + 690, 691 ] }, { - "teal": 571, - "source": 8, - "pc": [ - 692 - ] - }, - { - "teal": 572, + "teal": 558, "source": 8, "pc": [ + 692, 693 ] }, { - "teal": 575, + "teal": 559, "source": 8, "pc": [ 694, @@ -2634,180 +2622,168 @@ ] }, { - "teal": 576, - "source": 8, - "pc": [ - 696 - ] - }, - { - "teal": 577, + "teal": 560, "source": 8, "pc": [ - 697 + 696, + 697, + 698 ] }, { - "teal": 578, + "teal": 561, "source": 8, "pc": [ - 698 + 699 ] }, { - "teal": 579, + "teal": 562, "source": 8, "pc": [ - 699, 700 ] }, { - "teal": 580, + "teal": 563, "source": 8, "pc": [ 701 ] }, { - "teal": 581, + "teal": 564, "source": 8, "pc": [ 702 ] }, { - "teal": 582, - "source": 8, - "pc": [ - 703 - ] - }, - { - "teal": 585, + "teal": 567, "source": 8, "pc": [ + 703, 704, - 705, - 706 + 705 ] }, { - "teal": 586, + "teal": 572, "source": 8, "pc": [ + 706, 707 ] }, { - "teal": 587, + "teal": 573, "source": 8, "pc": [ - 708 + 708, + 709 ] }, { - "teal": 588, + "teal": 574, "source": 8, "pc": [ - 709 + 710, + 711 ] }, { - "teal": 589, + "teal": 575, "source": 8, "pc": [ - 710 + 712, + 713 ] }, { - "teal": 601, + "teal": 576, "source": 8, "pc": [ - 711, - 712, - 713 + 714, + 715, + 716 ] }, { - "teal": 604, + "teal": 577, "source": 8, "pc": [ - 714 + 717 ] }, { - "teal": 605, + "teal": 578, "source": 8, "pc": [ - 715, - 716 + 718 ] }, { - "teal": 612, + "teal": 579, "source": 8, "pc": [ - 717, - 718 + 719 ] }, { - "teal": 613, + "teal": 580, "source": 8, "pc": [ - 719, - 720 + 720, + 721 ] }, { - "teal": 614, + "teal": 581, "source": 8, "pc": [ - 721, 722 ] }, { - "teal": 615, + "teal": 582, "source": 8, "pc": [ 723 ] }, { - "teal": 616, + "teal": 583, "source": 8, "pc": [ - 724 + 724, + 725 ] }, { - "teal": 621, + "teal": 587, "source": 8, "pc": [ - 725, - 726 + 726, + 727 ] }, { - "teal": 622, + "teal": 588, "source": 8, "pc": [ - 727, - 728 + 728, + 729 ] }, { - "teal": 623, + "teal": 589, "source": 8, "pc": [ - 729, 730 ] }, { - "teal": 624, + "teal": 590, "source": 8, "pc": [ 731, @@ -2815,44 +2791,44 @@ ] }, { - "teal": 625, + "teal": 591, "source": 8, "pc": [ - 733 + 733, + 734 ] }, { - "teal": 626, + "teal": 592, "source": 8, "pc": [ - 734 + 735 ] }, { - "teal": 627, + "teal": 593, "source": 8, "pc": [ - 735, - 736, - 737 + 736 ] }, { - "teal": 636, + "teal": 594, "source": 8, "pc": [ + 737, 738 ] }, { - "teal": 637, + "teal": 595, "source": 8, "pc": [ 739 ] }, { - "teal": 638, + "teal": 596, "source": 8, "pc": [ 740, @@ -2860,7 +2836,7 @@ ] }, { - "teal": 642, + "teal": 601, "source": 8, "pc": [ 742, @@ -2868,7 +2844,7 @@ ] }, { - "teal": 643, + "teal": 602, "source": 8, "pc": [ 744, @@ -2876,7 +2852,7 @@ ] }, { - "teal": 647, + "teal": 603, "source": 8, "pc": [ 746, @@ -2884,7 +2860,7 @@ ] }, { - "teal": 648, + "teal": 604, "source": 8, "pc": [ 748, @@ -2892,61 +2868,55 @@ ] }, { - "teal": 649, + "teal": 605, "source": 8, "pc": [ 750, - 751 + 751, + 752 ] }, { - "teal": 653, + "teal": 606, "source": 8, "pc": [ - 752, 753 ] }, { - "teal": 654, + "teal": 607, "source": 8, "pc": [ - 754, - 755 + 754 ] }, { - "teal": 655, + "teal": 608, "source": 8, "pc": [ + 755, 756, 757 ] }, { - "teal": 658, - "source": 8, - "pc": [ - 758 - ] - }, - { - "teal": 659, + "teal": 613, "source": 8, "pc": [ - 759, - 760 + 758, + 759 ] }, { - "teal": 662, + "teal": 614, "source": 8, "pc": [ + 760, 761 ] }, { - "teal": 667, + "teal": 615, "source": 8, "pc": [ 762, @@ -2954,106 +2924,100 @@ ] }, { - "teal": 668, - "source": 8, - "pc": [ - 764 - ] - }, - { - "teal": 669, + "teal": 616, "source": 8, "pc": [ + 764, 765 ] }, { - "teal": 670, + "teal": 617, "source": 8, "pc": [ 766, - 767, - 768 + 767 ] }, { - "teal": 678, + "teal": 618, "source": 8, "pc": [ + 768, 769 ] }, { - "teal": 679, + "teal": 619, "source": 8, "pc": [ - 770 + 770, + 771 ] }, { - "teal": 680, + "teal": 620, "source": 8, "pc": [ - 771, - 772 + 772, + 773, + 774 ] }, { - "teal": 684, + "teal": 621, "source": 8, "pc": [ - 773, - 774 + 775 ] }, { - "teal": 685, + "teal": 622, "source": 8, "pc": [ - 775, - 776 + 776, + 777 ] }, { - "teal": 689, + "teal": 623, "source": 8, "pc": [ - 777, 778 ] }, { - "teal": 690, + "teal": 624, "source": 8, "pc": [ - 779, - 780 + 779 ] }, { - "teal": 693, + "teal": 625, "source": 8, "pc": [ - 781 + 780 ] }, { - "teal": 694, + "teal": 626, "source": 8, "pc": [ - 782, - 783 + 781, + 782 ] }, { - "teal": 697, + "teal": 633, "source": 8, "pc": [ + 783, 784 ] }, { - "teal": 702, + "teal": 637, "source": 8, "pc": [ 785, @@ -3061,170 +3025,200 @@ ] }, { - "teal": 703, + "teal": 640, "source": 8, "pc": [ 787, - 788, - 789 + 788 ] }, { - "teal": 708, + "teal": 641, "source": 8, "pc": [ - 790, - 791 + 789 ] }, { - "teal": 709, + "teal": 646, "source": 8, "pc": [ - 792 + 790 ] }, { - "teal": 710, + "teal": 649, "source": 8, "pc": [ + 791, + 792, 793 ] }, { - "teal": 711, + "teal": 650, "source": 8, "pc": [ 794 ] }, { - "teal": 712, + "teal": 653, "source": 8, "pc": [ 795, - 796 + 796, + 797 ] }, { - "teal": 716, + "teal": 654, "source": 8, "pc": [ - 797, 798 ] }, { - "teal": 717, + "teal": 655, + "source": 8, + "pc": [ + 799 + ] + }, + { + "teal": 656, + "source": 8, + "pc": [ + 800 + ] + }, + { + "teal": 657, "source": 8, "pc": [ - 799, - 800, 801 ] }, { - "teal": 718, + "teal": 658, + "source": 8, + "pc": [ + 802 + ] + }, + { + "teal": 661, "source": 8, "pc": [ - 802, - 803 + 803, + 804 ] }, { - "teal": 723, + "teal": 662, "source": 8, "pc": [ - 804, 805 ] }, { - "teal": 724, + "teal": 663, "source": 8, "pc": [ 806 ] }, { - "teal": 725, + "teal": 664, "source": 8, "pc": [ 807 ] }, { - "teal": 726, + "teal": 665, "source": 8, "pc": [ 808, - 809, + 809 + ] + }, + { + "teal": 666, + "source": 8, + "pc": [ 810 ] }, { - "teal": 734, + "teal": 667, "source": 8, "pc": [ 811 ] }, { - "teal": 735, + "teal": 668, "source": 8, "pc": [ 812 ] }, { - "teal": 736, + "teal": 671, "source": 8, "pc": [ 813, - 814 + 814, + 815 ] }, { - "teal": 740, + "teal": 672, "source": 8, "pc": [ - 815, 816 ] }, { - "teal": 741, + "teal": 673, + "source": 8, + "pc": [ + 817 + ] + }, + { + "teal": 674, "source": 8, "pc": [ - 817, 818 ] }, { - "teal": 745, + "teal": 675, "source": 8, "pc": [ - 819, - 820 + 819 ] }, { - "teal": 746, + "teal": 687, "source": 8, "pc": [ + 820, 821, 822 ] }, { - "teal": 749, + "teal": 690, "source": 8, "pc": [ 823 ] }, { - "teal": 750, + "teal": 691, "source": 8, "pc": [ 824, @@ -3232,116 +3226,122 @@ ] }, { - "teal": 753, + "teal": 698, "source": 8, "pc": [ - 826 + 826, + 827 ] }, { - "teal": 759, + "teal": 699, "source": 8, "pc": [ - 827, - 828 + 828, + 829 ] }, { - "teal": 760, + "teal": 700, "source": 8, "pc": [ - 829, - 830 + 830, + 831 ] }, { - "teal": 761, + "teal": 701, "source": 8, "pc": [ - 831, 832 ] }, { - "teal": 762, + "teal": 702, "source": 8, "pc": [ - 833, - 834 + 833 ] }, { - "teal": 763, + "teal": 707, "source": 8, "pc": [ + 834, 835 ] }, { - "teal": 764, + "teal": 708, "source": 8, "pc": [ - 836 + 836, + 837 ] }, { - "teal": 765, + "teal": 709, "source": 8, "pc": [ - 837 + 838, + 839 ] }, { - "teal": 766, + "teal": 710, "source": 8, "pc": [ - 838, - 839, - 840 + 840, + 841 ] }, { - "teal": 771, + "teal": 711, "source": 8, "pc": [ - 841, 842 ] }, { - "teal": 772, + "teal": 712, "source": 8, "pc": [ - 843, - 844 + 843 ] }, { - "teal": 777, + "teal": 713, "source": 8, "pc": [ + 844, 845, 846 ] }, { - "teal": 778, + "teal": 722, "source": 8, "pc": [ 847 ] }, { - "teal": 779, + "teal": 723, + "source": 8, + "pc": [ + 848 + ] + }, + { + "teal": 724, "source": 8, "pc": [ - 848, 849, 850 ] }, { - "teal": 784, + "teal": 728, "source": 8, "pc": [ 851, @@ -3349,7 +3349,7 @@ ] }, { - "teal": 785, + "teal": 729, "source": 8, "pc": [ 853, @@ -3357,45 +3357,39 @@ ] }, { - "teal": 786, - "source": 8, - "pc": [ - 855 - ] - }, - { - "teal": 787, + "teal": 733, "source": 8, "pc": [ - 856, - 857 + 855, + 856 ] }, { - "teal": 793, + "teal": 734, "source": 8, "pc": [ - 858, - 859 + 857, + 858 ] }, { - "teal": 794, + "teal": 735, "source": 8, "pc": [ - 860, - 861 + 859, + 860 ] }, { - "teal": 795, + "teal": 739, "source": 8, "pc": [ + 861, 862 ] }, { - "teal": 796, + "teal": 740, "source": 8, "pc": [ 863, @@ -3403,7 +3397,7 @@ ] }, { - "teal": 797, + "teal": 741, "source": 8, "pc": [ 865, @@ -3411,14 +3405,14 @@ ] }, { - "teal": 798, + "teal": 744, "source": 8, "pc": [ 867 ] }, { - "teal": 799, + "teal": 745, "source": 8, "pc": [ 868, @@ -3426,91 +3420,91 @@ ] }, { - "teal": 800, + "teal": 748, "source": 8, "pc": [ 870 ] }, { - "teal": 801, + "teal": 753, "source": 8, "pc": [ - 871 + 871, + 872 ] }, { - "teal": 802, + "teal": 754, "source": 8, "pc": [ - 872, - 873, - 874 + 873 ] }, { - "teal": 810, + "teal": 755, "source": 8, "pc": [ - 875 + 874 ] }, { - "teal": 811, + "teal": 756, "source": 8, "pc": [ - 876 + 875, + 876, + 877 ] }, { - "teal": 812, + "teal": 764, "source": 8, "pc": [ - 877, 878 ] }, { - "teal": 816, + "teal": 765, "source": 8, "pc": [ - 879, - 880 + 879 ] }, { - "teal": 817, + "teal": 766, "source": 8, "pc": [ - 881, - 882 + 880, + 881 ] }, { - "teal": 821, + "teal": 770, "source": 8, "pc": [ - 883, - 884 + 882, + 883 ] }, { - "teal": 822, + "teal": 771, "source": 8, "pc": [ - 885, - 886 + 884, + 885 ] }, { - "teal": 825, + "teal": 775, "source": 8, "pc": [ + 886, 887 ] }, { - "teal": 826, + "teal": 776, "source": 8, "pc": [ 888, @@ -3518,52 +3512,46 @@ ] }, { - "teal": 829, + "teal": 779, "source": 8, "pc": [ 890 ] }, { - "teal": 839, - "source": 8, - "pc": [ - 891 - ] - }, - { - "teal": 840, + "teal": 780, "source": 8, "pc": [ + 891, 892 ] }, { - "teal": 841, + "teal": 783, "source": 8, "pc": [ - 893, - 894 + 893 ] }, { - "teal": 845, + "teal": 788, "source": 8, "pc": [ - 895, - 896 + 894, + 895 ] }, { - "teal": 846, + "teal": 789, "source": 8, "pc": [ + 896, 897, 898 ] }, { - "teal": 850, + "teal": 794, "source": 8, "pc": [ 899, @@ -3571,61 +3559,61 @@ ] }, { - "teal": 851, + "teal": 795, "source": 8, "pc": [ - 901, - 902 + 901 ] }, { - "teal": 855, + "teal": 796, "source": 8, "pc": [ - 903 + 902 ] }, { - "teal": 856, + "teal": 797, "source": 8, "pc": [ - 904, - 905 + 903 ] }, { - "teal": 860, + "teal": 798, "source": 8, "pc": [ - 906, - 907 + 904, + 905 ] }, { - "teal": 861, + "teal": 802, "source": 8, "pc": [ - 908, - 909 + 906, + 907 ] }, { - "teal": 862, + "teal": 803, "source": 8, "pc": [ - 910, - 911 + 908, + 909, + 910 ] }, { - "teal": 865, + "teal": 804, "source": 8, "pc": [ + 911, 912 ] }, { - "teal": 866, + "teal": 809, "source": 8, "pc": [ 913, @@ -3633,44 +3621,44 @@ ] }, { - "teal": 869, + "teal": 810, "source": 8, "pc": [ 915 ] }, { - "teal": 878, + "teal": 811, "source": 8, "pc": [ 916 ] }, { - "teal": 879, + "teal": 812, "source": 8, "pc": [ - 917 + 917, + 918, + 919 ] }, { - "teal": 880, + "teal": 820, "source": 8, "pc": [ - 918, - 919 + 920 ] }, { - "teal": 884, + "teal": 821, "source": 8, "pc": [ - 920, 921 ] }, { - "teal": 885, + "teal": 822, "source": 8, "pc": [ 922, @@ -3678,7 +3666,7 @@ ] }, { - "teal": 889, + "teal": 826, "source": 8, "pc": [ 924, @@ -3686,7 +3674,7 @@ ] }, { - "teal": 890, + "teal": 827, "source": 8, "pc": [ 926, @@ -3694,7 +3682,7 @@ ] }, { - "teal": 891, + "teal": 831, "source": 8, "pc": [ 928, @@ -3702,7 +3690,7 @@ ] }, { - "teal": 895, + "teal": 832, "source": 8, "pc": [ 930, @@ -3710,45 +3698,45 @@ ] }, { - "teal": 896, + "teal": 835, "source": 8, "pc": [ - 932, - 933 + 932 ] }, { - "teal": 897, + "teal": 836, "source": 8, "pc": [ - 934, - 935 + 933, + 934 ] }, { - "teal": 900, + "teal": 839, "source": 8, "pc": [ - 936 + 935 ] }, { - "teal": 901, + "teal": 845, "source": 8, "pc": [ - 937, - 938 + 936, + 937 ] }, { - "teal": 904, + "teal": 846, "source": 8, "pc": [ + 938, 939 ] }, { - "teal": 908, + "teal": 847, "source": 8, "pc": [ 940, @@ -3756,7 +3744,7 @@ ] }, { - "teal": 912, + "teal": 848, "source": 8, "pc": [ 942, @@ -3764,22 +3752,28 @@ ] }, { - "teal": 915, + "teal": 849, + "source": 8, + "pc": [ + 944 + ] + }, + { + "teal": 850, "source": 8, "pc": [ - 944, 945 ] }, { - "teal": 916, + "teal": 851, "source": 8, "pc": [ 946 ] }, { - "teal": 921, + "teal": 852, "source": 8, "pc": [ 947, @@ -3788,53 +3782,47 @@ ] }, { - "teal": 922, + "teal": 857, "source": 8, "pc": [ - 950 + 950, + 951 ] }, { - "teal": 925, + "teal": 858, "source": 8, "pc": [ - 951, 952, 953 ] }, { - "teal": 926, - "source": 8, - "pc": [ - 954 - ] - }, - { - "teal": 927, + "teal": 863, "source": 8, "pc": [ + 954, 955 ] }, { - "teal": 935, + "teal": 864, "source": 8, "pc": [ - 956, - 957, - 958 + 956 ] }, { - "teal": 938, + "teal": 865, "source": 8, "pc": [ + 957, + 958, 959 ] }, { - "teal": 942, + "teal": 870, "source": 8, "pc": [ 960, @@ -3842,59 +3830,53 @@ ] }, { - "teal": 943, - "source": 8, - "pc": [ - 962 - ] - }, - { - "teal": 944, + "teal": 871, "source": 8, "pc": [ + 962, 963 ] }, { - "teal": 945, + "teal": 872, "source": 8, "pc": [ - 964, - 965 + 964 ] }, { - "teal": 955, + "teal": 873, "source": 8, "pc": [ + 965, 966 ] }, { - "teal": 956, + "teal": 879, "source": 8, "pc": [ - 967 + 967, + 968 ] }, { - "teal": 957, + "teal": 880, "source": 8, "pc": [ - 968, - 969 + 969, + 970 ] }, { - "teal": 961, + "teal": 881, "source": 8, "pc": [ - 970, 971 ] }, { - "teal": 962, + "teal": 882, "source": 8, "pc": [ 972, @@ -3902,7 +3884,7 @@ ] }, { - "teal": 966, + "teal": 883, "source": 8, "pc": [ 974, @@ -3910,215 +3892,221 @@ ] }, { - "teal": 967, + "teal": 884, "source": 8, "pc": [ - 976, - 977 + 976 ] }, { - "teal": 971, + "teal": 885, + "source": 8, + "pc": [ + 977, + 978 + ] + }, + { + "teal": 886, "source": 8, "pc": [ - 978, 979 ] }, { - "teal": 972, + "teal": 887, "source": 8, "pc": [ - 980, - 981 + 980 ] }, { - "teal": 973, + "teal": 888, "source": 8, "pc": [ + 981, 982, 983 ] }, { - "teal": 974, + "teal": 896, "source": 8, "pc": [ 984 ] }, { - "teal": 975, + "teal": 897, "source": 8, "pc": [ - 985, - 986 + 985 ] }, { - "teal": 979, + "teal": 898, "source": 8, "pc": [ - 987, - 988 + 986, + 987 ] }, { - "teal": 980, + "teal": 902, "source": 8, "pc": [ - 989, - 990 + 988, + 989 ] }, { - "teal": 984, + "teal": 903, "source": 8, "pc": [ - 991, - 992 + 990, + 991 ] }, { - "teal": 985, + "teal": 907, "source": 8, "pc": [ - 993, - 994 + 992, + 993 ] }, { - "teal": 988, + "teal": 908, "source": 8, "pc": [ + 994, 995 ] }, { - "teal": 989, + "teal": 911, "source": 8, "pc": [ - 996, - 997 + 996 ] }, { - "teal": 992, + "teal": 912, "source": 8, "pc": [ + 997, 998 ] }, { - "teal": 1000, + "teal": 915, "source": 8, "pc": [ 999 ] }, { - "teal": 1001, + "teal": 925, "source": 8, "pc": [ 1000 ] }, { - "teal": 1002, + "teal": 926, "source": 8, "pc": [ - 1001, - 1002 + 1001 ] }, { - "teal": 1006, + "teal": 927, "source": 8, "pc": [ - 1003, - 1004 + 1002, + 1003 ] }, { - "teal": 1007, + "teal": 931, "source": 8, "pc": [ - 1005, - 1006 + 1004, + 1005 ] }, { - "teal": 1011, + "teal": 932, "source": 8, "pc": [ - 1007, - 1008 + 1006, + 1007 ] }, { - "teal": 1012, + "teal": 936, "source": 8, "pc": [ - 1009, - 1010 + 1008, + 1009 ] }, { - "teal": 1016, + "teal": 937, "source": 8, "pc": [ - 1011, - 1012 + 1010, + 1011 ] }, { - "teal": 1017, + "teal": 941, "source": 8, "pc": [ - 1013, - 1014 + 1012 ] }, { - "teal": 1018, + "teal": 942, "source": 8, "pc": [ - 1015 + 1013, + 1014 ] }, { - "teal": 1019, + "teal": 946, "source": 8, "pc": [ - 1016, - 1017 + 1015, + 1016 ] }, { - "teal": 1020, + "teal": 947, "source": 8, "pc": [ - 1018, - 1019 + 1017, + 1018 ] }, { - "teal": 1021, + "teal": 948, "source": 8, "pc": [ + 1019, 1020 ] }, { - "teal": 1022, + "teal": 951, "source": 8, "pc": [ 1021 ] }, { - "teal": 1023, + "teal": 952, "source": 8, "pc": [ 1022, @@ -4126,113 +4114,107 @@ ] }, { - "teal": 1026, + "teal": 955, "source": 8, "pc": [ 1024 ] }, { - "teal": 1027, + "teal": 964, "source": 8, "pc": [ - 1025, - 1026 + 1025 ] }, { - "teal": 1030, + "teal": 965, "source": 8, "pc": [ - 1027 + 1026 ] }, { - "teal": 1031, + "teal": 966, "source": 8, "pc": [ + 1027, 1028 ] }, { - "teal": 1036, + "teal": 970, "source": 8, "pc": [ 1029, - 1030, - 1031 + 1030 ] }, { - "teal": 1037, + "teal": 971, "source": 8, "pc": [ + 1031, 1032 ] }, { - "teal": 1040, + "teal": 975, "source": 8, "pc": [ 1033, - 1034, - 1035 + 1034 ] }, { - "teal": 1041, + "teal": 976, "source": 8, "pc": [ + 1035, 1036 ] }, { - "teal": 1042, + "teal": 977, "source": 8, "pc": [ - 1037 + 1037, + 1038 ] }, { - "teal": 1051, + "teal": 981, "source": 8, "pc": [ - 1038, 1039, 1040 ] }, { - "teal": 1054, - "source": 8, - "pc": [ - 1041 - ] - }, - { - "teal": 1058, + "teal": 982, "source": 8, "pc": [ - 1042, - 1043 + 1041, + 1042 ] }, { - "teal": 1059, + "teal": 983, "source": 8, "pc": [ + 1043, 1044 ] }, { - "teal": 1060, + "teal": 986, "source": 8, "pc": [ 1045 ] }, { - "teal": 1061, + "teal": 987, "source": 8, "pc": [ 1046, @@ -4240,198 +4222,192 @@ ] }, { - "teal": 1071, + "teal": 990, "source": 8, "pc": [ 1048 ] }, { - "teal": 1072, + "teal": 994, "source": 8, "pc": [ - 1049 + 1049, + 1050 ] }, { - "teal": 1073, + "teal": 998, "source": 8, "pc": [ - 1050, - 1051 + 1051, + 1052 ] }, { - "teal": 1077, + "teal": 1001, "source": 8, "pc": [ - 1052, - 1053 + 1053, + 1054 ] }, { - "teal": 1078, + "teal": 1002, "source": 8, "pc": [ - 1054, 1055 ] }, { - "teal": 1082, + "teal": 1007, "source": 8, "pc": [ 1056, - 1057 + 1057, + 1058 ] }, { - "teal": 1083, + "teal": 1008, "source": 8, "pc": [ - 1058, 1059 ] }, { - "teal": 1084, + "teal": 1011, "source": 8, "pc": [ - 1060 + 1060, + 1061, + 1062 ] }, { - "teal": 1085, + "teal": 1012, "source": 8, "pc": [ - 1061, - 1062 + 1063 ] }, { - "teal": 1089, + "teal": 1013, "source": 8, "pc": [ - 1063, 1064 ] }, { - "teal": 1090, + "teal": 1021, "source": 8, "pc": [ 1065, - 1066 + 1066, + 1067 ] }, { - "teal": 1091, + "teal": 1024, "source": 8, "pc": [ - 1067, 1068 ] }, { - "teal": 1092, + "teal": 1028, "source": 8, "pc": [ - 1069 + 1069, + 1070 ] }, { - "teal": 1093, + "teal": 1029, "source": 8, "pc": [ - 1070, 1071 ] }, { - "teal": 1097, + "teal": 1030, "source": 8, "pc": [ - 1072, - 1073 + 1072 ] }, { - "teal": 1098, + "teal": 1031, "source": 8, "pc": [ - 1074, - 1075 + 1073, + 1074 ] }, { - "teal": 1102, + "teal": 1041, "source": 8, "pc": [ - 1076, - 1077 + 1075 ] }, { - "teal": 1103, + "teal": 1042, "source": 8, "pc": [ - 1078, - 1079 + 1076 ] }, { - "teal": 1104, + "teal": 1043, "source": 8, "pc": [ - 1080 + 1077, + 1078 ] }, { - "teal": 1105, + "teal": 1047, "source": 8, "pc": [ - 1081, - 1082 + 1079, + 1080 ] }, { - "teal": 1108, + "teal": 1048, "source": 8, "pc": [ - 1083 + 1081, + 1082 ] }, { - "teal": 1109, + "teal": 1052, "source": 8, "pc": [ - 1084, - 1085 + 1083, + 1084 ] }, { - "teal": 1112, + "teal": 1053, "source": 8, "pc": [ + 1085, 1086 ] }, { - "teal": 1120, - "source": 8, - "pc": [ - 1087 - ] - }, - { - "teal": 1121, + "teal": 1057, "source": 8, "pc": [ + 1087, 1088 ] }, { - "teal": 1122, + "teal": 1058, "source": 8, "pc": [ 1089, @@ -4439,7 +4415,7 @@ ] }, { - "teal": 1126, + "teal": 1059, "source": 8, "pc": [ 1091, @@ -4447,287 +4423,275 @@ ] }, { - "teal": 1127, + "teal": 1060, "source": 8, "pc": [ - 1093, - 1094 + 1093 ] }, { - "teal": 1131, + "teal": 1061, "source": 8, "pc": [ - 1095, - 1096 + 1094, + 1095 ] }, { - "teal": 1132, + "teal": 1065, "source": 8, "pc": [ - 1097, - 1098 + 1096, + 1097 ] }, { - "teal": 1136, + "teal": 1066, "source": 8, "pc": [ - 1099, - 1100 + 1098, + 1099 ] }, { - "teal": 1137, + "teal": 1070, "source": 8, "pc": [ - 1101, - 1102 + 1100, + 1101 ] }, { - "teal": 1138, + "teal": 1071, "source": 8, "pc": [ + 1102, 1103 ] }, { - "teal": 1139, + "teal": 1074, "source": 8, "pc": [ - 1104, - 1105 + 1104 ] }, { - "teal": 1140, + "teal": 1075, "source": 8, "pc": [ - 1106, - 1107 + 1105, + 1106 ] }, { - "teal": 1141, + "teal": 1078, "source": 8, "pc": [ - 1108 + 1107 ] }, { - "teal": 1142, + "teal": 1086, "source": 8, "pc": [ - 1109 + 1108 ] }, { - "teal": 1143, + "teal": 1087, "source": 8, "pc": [ - 1110, - 1111 + 1109 ] }, { - "teal": 1146, + "teal": 1088, "source": 8, "pc": [ - 1112 + 1110, + 1111 ] }, { - "teal": 1147, + "teal": 1092, "source": 8, "pc": [ - 1113, - 1114 + 1112, + 1113 ] }, { - "teal": 1150, + "teal": 1093, "source": 8, "pc": [ + 1114, 1115 ] }, { - "teal": 1151, - "source": 8, - "pc": [ - 1116 - ] - }, - { - "teal": 1156, + "teal": 1097, "source": 8, "pc": [ + 1116, 1117 ] }, { - "teal": 1159, + "teal": 1098, "source": 8, "pc": [ 1118, - 1119, - 1120 + 1119 ] }, { - "teal": 1160, + "teal": 1102, "source": 8, "pc": [ + 1120, 1121 ] }, { - "teal": 1161, - "source": 8, - "pc": [ - 1122 - ] - }, - { - "teal": 1162, + "teal": 1103, "source": 8, "pc": [ + 1122, 1123 ] }, { - "teal": 1163, + "teal": 1104, "source": 8, "pc": [ 1124 ] }, { - "teal": 1164, + "teal": 1105, "source": 8, "pc": [ - 1125 + 1125, + 1126 ] }, { - "teal": 1167, + "teal": 1106, "source": 8, "pc": [ - 1126, 1127, 1128 ] }, { - "teal": 1168, + "teal": 1107, "source": 8, "pc": [ 1129 ] }, { - "teal": 1169, + "teal": 1108, "source": 8, "pc": [ 1130 ] }, { - "teal": 1170, + "teal": 1109, "source": 8, "pc": [ - 1131 + 1131, + 1132 ] }, { - "teal": 1171, + "teal": 1112, "source": 8, "pc": [ - 1132 + 1133 ] }, { - "teal": 1181, + "teal": 1113, "source": 8, "pc": [ - 1133, 1134, 1135 ] }, { - "teal": 1185, + "teal": 1116, "source": 8, "pc": [ - 1136, - 1137 + 1136 ] }, { - "teal": 1186, + "teal": 1117, "source": 8, "pc": [ - 1138 + 1137 ] }, { - "teal": 1187, + "teal": 1122, "source": 8, "pc": [ - 1139 + 1138, + 1139, + 1140 ] }, { - "teal": 1188, + "teal": 1123, "source": 8, "pc": [ - 1140 + 1141 ] }, { - "teal": 1189, + "teal": 1126, "source": 8, "pc": [ - 1141, 1142, - 1143 + 1143, + 1144 ] }, { - "teal": 1190, + "teal": 1127, "source": 8, "pc": [ - 1144, 1145 ] }, { - "teal": 1191, + "teal": 1128, "source": 8, "pc": [ 1146 ] }, { - "teal": 1192, + "teal": 1137, "source": 8, "pc": [ - 1147 + 1147, + 1148, + 1149 ] }, { - "teal": 1193, + "teal": 1140, "source": 8, "pc": [ - 1148, - 1149, 1150 ] }, { - "teal": 1196, + "teal": 1144, "source": 8, "pc": [ 1151, @@ -4735,53 +4699,59 @@ ] }, { - "teal": 1199, + "teal": 1145, "source": 8, "pc": [ 1153 ] }, { - "teal": 1204, + "teal": 1146, + "source": 8, + "pc": [ + 1154 + ] + }, + { + "teal": 1147, "source": 8, "pc": [ - 1154, 1155, 1156 ] }, { - "teal": 1205, + "teal": 1157, "source": 8, "pc": [ 1157 ] }, { - "teal": 1206, + "teal": 1158, "source": 8, "pc": [ 1158 ] }, { - "teal": 1212, + "teal": 1159, "source": 8, "pc": [ 1159, - 1160, - 1161 + 1160 ] }, { - "teal": 1215, + "teal": 1163, "source": 8, "pc": [ + 1161, 1162 ] }, { - "teal": 1219, + "teal": 1164, "source": 8, "pc": [ 1163, @@ -4789,21 +4759,15 @@ ] }, { - "teal": 1220, - "source": 8, - "pc": [ - 1165 - ] - }, - { - "teal": 1221, + "teal": 1168, "source": 8, "pc": [ + 1165, 1166 ] }, { - "teal": 1222, + "teal": 1169, "source": 8, "pc": [ 1167, @@ -4811,30 +4775,30 @@ ] }, { - "teal": 1226, + "teal": 1170, "source": 8, "pc": [ - 1169, - 1170 + 1169 ] }, { - "teal": 1227, + "teal": 1171, "source": 8, "pc": [ - 1171, - 1172 + 1170, + 1171 ] }, { - "teal": 1228, + "teal": 1175, "source": 8, "pc": [ + 1172, 1173 ] }, { - "teal": 1229, + "teal": 1176, "source": 8, "pc": [ 1174, @@ -4842,7 +4806,7 @@ ] }, { - "teal": 1230, + "teal": 1177, "source": 8, "pc": [ 1176, @@ -4850,119 +4814,113 @@ ] }, { - "teal": 1231, + "teal": 1178, "source": 8, "pc": [ 1178 ] }, { - "teal": 1232, + "teal": 1179, "source": 8, "pc": [ - 1179 + 1179, + 1180 ] }, { - "teal": 1233, + "teal": 1183, "source": 8, "pc": [ - 1180 + 1181, + 1182 ] }, { - "teal": 1234, + "teal": 1184, "source": 8, "pc": [ - 1181 + 1183, + 1184 ] }, { - "teal": 1235, + "teal": 1188, "source": 8, "pc": [ - 1182 - ] - }, - { - "teal": 1243, - "source": 8, - "pc": [ - 1183 + 1185, + 1186 ] }, { - "teal": 1244, + "teal": 1189, "source": 8, "pc": [ - 1184 + 1187, + 1188 ] }, { - "teal": 1245, + "teal": 1190, "source": 8, "pc": [ - 1185, - 1186 + 1189 ] }, { - "teal": 1249, + "teal": 1191, "source": 8, "pc": [ - 1187, - 1188 + 1190, + 1191 ] }, { - "teal": 1250, + "teal": 1194, "source": 8, "pc": [ - 1189, - 1190 + 1192 ] }, { - "teal": 1254, + "teal": 1195, "source": 8, "pc": [ - 1191, - 1192 + 1193, + 1194 ] }, { - "teal": 1255, + "teal": 1198, "source": 8, "pc": [ - 1193, - 1194 + 1195 ] }, { - "teal": 1259, + "teal": 1206, "source": 8, "pc": [ - 1195, 1196 ] }, { - "teal": 1260, + "teal": 1207, "source": 8, "pc": [ - 1197, - 1198 + 1197 ] }, { - "teal": 1261, + "teal": 1208, "source": 8, "pc": [ + 1198, 1199 ] }, { - "teal": 1262, + "teal": 1212, "source": 8, "pc": [ 1200, @@ -4970,7 +4928,7 @@ ] }, { - "teal": 1263, + "teal": 1213, "source": 8, "pc": [ 1202, @@ -4978,21 +4936,15 @@ ] }, { - "teal": 1264, - "source": 8, - "pc": [ - 1204 - ] - }, - { - "teal": 1265, + "teal": 1217, "source": 8, "pc": [ + 1204, 1205 ] }, { - "teal": 1266, + "teal": 1218, "source": 8, "pc": [ 1206, @@ -5000,308 +4952,566 @@ ] }, { - "teal": 1269, - "source": 8, - "pc": [ - 1208 - ] - }, - { - "teal": 1270, + "teal": 1222, "source": 8, "pc": [ - 1209, - 1210 + 1208, + 1209 ] }, { - "teal": 1273, + "teal": 1223, "source": 8, "pc": [ + 1210, 1211 ] }, { - "teal": 1274, + "teal": 1224, "source": 8, "pc": [ 1212 ] }, { - "teal": 1279, - "source": 4, + "teal": 1225, + "source": 8, "pc": [ 1213, - 1214, - 1215 + 1214 ] }, { - "teal": 1280, - "source": 4, + "teal": 1226, + "source": 8, "pc": [ + 1215, 1216 ] }, { - "teal": 1281, - "source": 4, + "teal": 1227, + "source": 8, "pc": [ 1217 ] }, { - "teal": 1285, - "source": 4, + "teal": 1228, + "source": 8, + "pc": [ + 1218 + ] + }, + { + "teal": 1229, + "source": 8, "pc": [ - 1218, 1219, 1220 ] }, { - "teal": 1289, - "source": 5, + "teal": 1232, + "source": 8, "pc": [ - 1221, - 1222 + 1221 ] }, { - "teal": 1290, - "source": 5, + "teal": 1233, + "source": 8, "pc": [ - 1223, - 1224, - 1225 + 1222, + 1223 ] }, { - "teal": 1291, - "source": 5, + "teal": 1236, + "source": 8, "pc": [ - 1226, - 1227 + 1224 ] }, { - "teal": 1292, - "source": 5, + "teal": 1237, + "source": 8, "pc": [ - 1228 + 1225 ] }, { - "teal": 1293, - "source": 5, + "teal": 1242, + "source": 8, "pc": [ + 1226 + ] + }, + { + "teal": 1245, + "source": 8, + "pc": [ + 1227, + 1228, 1229 ] }, { - "teal": 1294, - "source": 5, + "teal": 1246, + "source": 8, "pc": [ 1230 ] }, { - "teal": 1295, - "source": 4, + "teal": 1247, + "source": 8, "pc": [ 1231 ] }, { - "teal": 1298, - "source": 3, + "teal": 1248, + "source": 8, + "pc": [ + 1232 + ] + }, + { + "teal": 1249, + "source": 8, + "pc": [ + 1233 + ] + }, + { + "teal": 1250, + "source": 8, + "pc": [ + 1234 + ] + }, + { + "teal": 1253, + "source": 8, "pc": [ - 1232, - 1233, - 1234, 1235, 1236, 1237 ] }, { - "teal": 1299, - "source": 3, + "teal": 1254, + "source": 8, + "pc": [ + 1238 + ] + }, + { + "teal": 1255, + "source": 8, + "pc": [ + 1239 + ] + }, + { + "teal": 1256, + "source": 8, "pc": [ - 1238, - 1239, 1240 ] }, { - "teal": 1300, - "source": 3, + "teal": 1257, + "source": 8, + "pc": [ + 1241 + ] + }, + { + "teal": 1267, + "source": 8, "pc": [ - 1241, 1242, 1243, 1244 ] }, { - "teal": 1301, - "source": 3, + "teal": 1271, + "source": 8, "pc": [ - 1245 + 1245, + 1246 ] }, { - "teal": 1304, - "source": 3, + "teal": 1272, + "source": 8, + "pc": [ + 1247 + ] + }, + { + "teal": 1273, + "source": 8, + "pc": [ + 1248 + ] + }, + { + "teal": 1274, + "source": 8, + "pc": [ + 1249 + ] + }, + { + "teal": 1275, + "source": 8, "pc": [ - 1246, - 1247, - 1248, - 1249, 1250, - 1251 + 1251, + 1252 ] }, { - "teal": 1305, - "source": 3, + "teal": 1276, + "source": 8, "pc": [ - 1252, 1253, - 1254, - 1255, - 1256, - 1257 + 1254 ] }, { - "teal": 1306, - "source": 3, + "teal": 1277, + "source": 8, "pc": [ + 1255 + ] + }, + { + "teal": 1278, + "source": 8, + "pc": [ + 1256 + ] + }, + { + "teal": 1279, + "source": 8, + "pc": [ + 1257, 1258, - 1259, + 1259 + ] + }, + { + "teal": 1282, + "source": 8, + "pc": [ 1260, - 1261, - 1262, - 1263 + 1261 ] }, { - "teal": 1307, - "source": 3, + "teal": 1285, + "source": 8, + "pc": [ + 1262 + ] + }, + { + "teal": 1290, + "source": 8, "pc": [ + 1263, 1264, - 1265, - 1266, - 1267, + 1265 + ] + }, + { + "teal": 1291, + "source": 8, + "pc": [ + 1266 + ] + }, + { + "teal": 1292, + "source": 8, + "pc": [ + 1267 + ] + }, + { + "teal": 1298, + "source": 8, + "pc": [ 1268, - 1269 + 1269, + 1270 ] }, { - "teal": 1308, - "source": 3, + "teal": 1301, + "source": 8, + "pc": [ + 1271 + ] + }, + { + "teal": 1305, + "source": 8, "pc": [ - 1270, - 1271, 1272, - 1273, - 1274, + 1273 + ] + }, + { + "teal": 1306, + "source": 8, + "pc": [ + 1274 + ] + }, + { + "teal": 1307, + "source": 8, + "pc": [ 1275 ] }, { - "teal": 1309, - "source": 3, + "teal": 1308, + "source": 8, "pc": [ 1276, - 1277, + 1277 + ] + }, + { + "teal": 1312, + "source": 8, + "pc": [ 1278, - 1279, + 1279 + ] + }, + { + "teal": 1313, + "source": 8, + "pc": [ 1280, 1281 ] }, { - "teal": 1310, - "source": 3, + "teal": 1314, + "source": 8, + "pc": [ + 1282 + ] + }, + { + "teal": 1315, + "source": 8, "pc": [ - 1282, 1283, - 1284, + 1284 + ] + }, + { + "teal": 1316, + "source": 8, + "pc": [ 1285, - 1286, + 1286 + ] + }, + { + "teal": 1317, + "source": 8, + "pc": [ 1287 ] }, { - "teal": 1311, - "source": 3, + "teal": 1318, + "source": 8, + "pc": [ + 1288 + ] + }, + { + "teal": 1319, + "source": 8, + "pc": [ + 1289 + ] + }, + { + "teal": 1320, + "source": 8, + "pc": [ + 1290 + ] + }, + { + "teal": 1321, + "source": 8, + "pc": [ + 1291 + ] + }, + { + "teal": 1329, + "source": 8, + "pc": [ + 1292 + ] + }, + { + "teal": 1330, + "source": 8, "pc": [ - 1288, - 1289, - 1290, - 1291, - 1292, 1293 ] }, { - "teal": 1312, - "source": 3, + "teal": 1331, + "source": 8, "pc": [ 1294, - 1295, - 1296 + 1295 ] }, { - "teal": 1313, - "source": 3, + "teal": 1335, + "source": 8, + "pc": [ + 1296, + 1297 + ] + }, + { + "teal": 1336, + "source": 8, "pc": [ - 1297, 1298, - 1299, + 1299 + ] + }, + { + "teal": 1340, + "source": 8, + "pc": [ 1300, - 1301, + 1301 + ] + }, + { + "teal": 1341, + "source": 8, + "pc": [ 1302, - 1303, + 1303 + ] + }, + { + "teal": 1345, + "source": 8, + "pc": [ 1304, - 1305, + 1305 + ] + }, + { + "teal": 1346, + "source": 8, + "pc": [ 1306, - 1307, - 1308, + 1307 + ] + }, + { + "teal": 1347, + "source": 8, + "pc": [ + 1308 + ] + }, + { + "teal": 1348, + "source": 8, + "pc": [ 1309, - 1310, + 1310 + ] + }, + { + "teal": 1349, + "source": 8, + "pc": [ 1311, - 1312, - 1313, + 1312 + ] + }, + { + "teal": 1350, + "source": 8, + "pc": [ + 1313 + ] + }, + { + "teal": 1351, + "source": 8, + "pc": [ 1314 ] }, { - "teal": 1314, - "source": 3, + "teal": 1352, + "source": 8, "pc": [ - 1315 + 1315, + 1316 ] }, { - "teal": 1317, - "source": 3, + "teal": 1355, + "source": 8, + "pc": [ + 1317 + ] + }, + { + "teal": 1356, + "source": 8, "pc": [ - 1316, - 1317, 1318, - 1319, - 1320, + 1319 + ] + }, + { + "teal": 1359, + "source": 8, + "pc": [ + 1320 + ] + }, + { + "teal": 1360, + "source": 8, + "pc": [ 1321 ] }, { - "teal": 1318, - "source": 3, + "teal": 1365, + "source": 4, "pc": [ 1322, 1323, @@ -5309,20 +5519,291 @@ ] }, { - "teal": 1319, - "source": 3, + "teal": 1366, + "source": 4, + "pc": [ + 1325 + ] + }, + { + "teal": 1367, + "source": 4, + "pc": [ + 1326 + ] + }, + { + "teal": 1371, + "source": 4, "pc": [ - 1325, - 1326, 1327, - 1328 + 1328, + 1329 ] }, { - "teal": 1320, + "teal": 1375, + "source": 5, + "pc": [ + 1330, + 1331 + ] + }, + { + "teal": 1376, + "source": 5, + "pc": [ + 1332, + 1333, + 1334 + ] + }, + { + "teal": 1377, + "source": 5, + "pc": [ + 1335, + 1336 + ] + }, + { + "teal": 1378, + "source": 5, + "pc": [ + 1337 + ] + }, + { + "teal": 1379, + "source": 5, + "pc": [ + 1338 + ] + }, + { + "teal": 1380, + "source": 5, + "pc": [ + 1339 + ] + }, + { + "teal": 1381, + "source": 4, + "pc": [ + 1340 + ] + }, + { + "teal": 1384, "source": 3, "pc": [ - 1329 + 1341, + 1342, + 1343, + 1344, + 1345, + 1346 + ] + }, + { + "teal": 1385, + "source": 3, + "pc": [ + 1347, + 1348, + 1349 + ] + }, + { + "teal": 1386, + "source": 3, + "pc": [ + 1350, + 1351, + 1352, + 1353 + ] + }, + { + "teal": 1387, + "source": 3, + "pc": [ + 1354 + ] + }, + { + "teal": 1390, + "source": 3, + "pc": [ + 1355, + 1356, + 1357, + 1358, + 1359, + 1360 + ] + }, + { + "teal": 1391, + "source": 3, + "pc": [ + 1361, + 1362, + 1363, + 1364, + 1365, + 1366 + ] + }, + { + "teal": 1392, + "source": 3, + "pc": [ + 1367, + 1368, + 1369, + 1370, + 1371, + 1372 + ] + }, + { + "teal": 1393, + "source": 3, + "pc": [ + 1373, + 1374, + 1375, + 1376, + 1377, + 1378 + ] + }, + { + "teal": 1394, + "source": 3, + "pc": [ + 1379, + 1380, + 1381, + 1382, + 1383, + 1384 + ] + }, + { + "teal": 1395, + "source": 3, + "pc": [ + 1385, + 1386, + 1387, + 1388, + 1389, + 1390 + ] + }, + { + "teal": 1396, + "source": 3, + "pc": [ + 1391, + 1392, + 1393, + 1394, + 1395, + 1396 + ] + }, + { + "teal": 1397, + "source": 3, + "pc": [ + 1397, + 1398, + 1399, + 1400, + 1401, + 1402 + ] + }, + { + "teal": 1398, + "source": 3, + "pc": [ + 1403, + 1404, + 1405 + ] + }, + { + "teal": 1399, + "source": 3, + "pc": [ + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1413, + 1414, + 1415, + 1416, + 1417, + 1418, + 1419, + 1420, + 1421, + 1422, + 1423 + ] + }, + { + "teal": 1400, + "source": 3, + "pc": [ + 1424 + ] + }, + { + "teal": 1403, + "source": 3, + "pc": [ + 1425, + 1426, + 1427, + 1428, + 1429, + 1430 + ] + }, + { + "teal": 1404, + "source": 3, + "pc": [ + 1431, + 1432, + 1433 + ] + }, + { + "teal": 1405, + "source": 3, + "pc": [ + 1434, + 1435, + 1436, + 1437 + ] + }, + { + "teal": 1406, + "source": 3, + "pc": [ + 1438 ] } ] \ 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..363e4f0a0 100644 --- a/assets/arc-0059/contracts/clients/Arc59Client.ts +++ b/assets/arc-0059/contracts/clients/Arc59Client.ts @@ -103,7 +103,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gNgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQzCgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDYKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYxCgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTYyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MwoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY0CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjUKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzAKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcxCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWY4X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOV9lbmQ6CgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg5CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTAKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTMKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjYyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODEKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NAoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDkKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTAKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MQoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OQoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NgoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MgoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjUKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDIKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjQKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjYKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjczCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzQKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODcKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NAoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk2CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/clients/MutableARC59Client.ts b/assets/arc-0059/contracts/clients/MutableARC59Client.ts index dda37c034..6017f07f0 100644 --- a/assets/arc-0059/contracts/clients/MutableARC59Client.ts +++ b/assets/arc-0059/contracts/clients/MutableARC59Client.ts @@ -108,7 +108,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo0OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDYKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MwoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA2CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjMKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2NAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY1CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjgKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTY5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcwCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmOF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzUKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjlfZW5kOgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkwCgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzkKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgxCgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo0OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ5CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDQKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ5CgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUwCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTEKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NAoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzYKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTIKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQyCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjIKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY2CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg3CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTQKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTgKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { 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": { From a8592261b03212fc588465c0668e4f2749b508d0 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Tue, 29 Oct 2024 17:31:36 -0400 Subject: [PATCH 2/6] add receiverAlgoNeededForWorstCaseClaim --- assets/arc-0059/__test__/arc59.test.ts | 14 +- assets/arc-0059/contracts/arc59.algo.ts | 3 + .../contracts/artifacts/ARC59.approval.teal | 228 +- .../contracts/artifacts/ARC59.arc32.json | 6 +- .../contracts/artifacts/ARC59.arc4.json | 2 +- .../contracts/artifacts/ARC59.src_map.json | 3812 +++++++++-------- .../artifacts/ControlledAddress.approval.teal | 6 +- .../artifacts/ControlledAddress.arc32.json | 2 +- .../artifacts/ControlledAddress.src_map.json | 60 +- .../artifacts/MutableARC59.approval.teal | 228 +- .../artifacts/MutableARC59.arc32.json | 6 +- .../artifacts/MutableARC59.arc4.json | 2 +- .../artifacts/MutableARC59.src_map.json | 2680 ++++++------ .../arc-0059/contracts/clients/Arc59Client.ts | 26 +- .../clients/ControlledAddressClient.ts | 2 +- .../contracts/clients/MutableARC59Client.ts | 26 +- 16 files changed, 3618 insertions(+), 3485 deletions(-) diff --git a/assets/arc-0059/__test__/arc59.test.ts b/assets/arc-0059/__test__/arc59.test.ts index 44b059e46..4182260aa 100644 --- a/assets/arc-0059/__test__/arc59.test.ts +++ b/assets/arc-0059/__test__/arc59.test.ts @@ -214,11 +214,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 () => { diff --git a/assets/arc-0059/contracts/arc59.algo.ts b/assets/arc-0059/contracts/arc59.algo.ts index 841d6142a..c7f00bbb2 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; diff --git a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal index cb35adc8e..a607cdba3 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 @@ -232,7 +232,7 @@ arc59_getSendAssetInfo: byte 0x 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,7 +314,7 @@ arc59_getSendAssetInfo: bz *if2_end // *if2_consequent - // contracts/arc59.algo.ts:101 + // contracts/arc59.algo.ts:104 // info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -329,14 +337,14 @@ arc59_getSendAssetInfo: *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 +361,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 +380,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 +390,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 +407,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 +429,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 +455,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 +469,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 +480,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 +498,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 +513,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 +530,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 @@ -543,7 +551,7 @@ arc59_getSendAssetInfo: *if5_end: // *if7_condition - // contracts/arc59.algo.ts:144 + // contracts/arc59.algo.ts:147 // inbox.balance > inbox.minBalance && info.receiverAlgoNeededForClaim !== 0 frame_dig 6 // inbox: address acct_params_get AcctBalance @@ -567,7 +575,7 @@ arc59_getSendAssetInfo: bz *if7_end // *if7_consequent - // contracts/arc59.algo.ts:149 + // contracts/arc59.algo.ts:152 // algoConsumedByClaim = globals.assetOptInMinBalance + (info.itxns + 4) * globals.minTxnFee global AssetOptInMinBalance frame_dig 2 // info: SendAssetInfo @@ -582,7 +590,7 @@ arc59_getSendAssetInfo: + frame_bury 7 // algoConsumedByClaim: uint64 - // contracts/arc59.algo.ts:150 + // contracts/arc59.algo.ts:153 // inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim frame_dig 6 // inbox: address acct_params_get AcctBalance @@ -596,7 +604,7 @@ arc59_getSendAssetInfo: frame_bury 8 // inboxAlgoAvailable: uint64 // *if8_condition - // contracts/arc59.algo.ts:151 + // contracts/arc59.algo.ts:154 // inboxAlgoAvailable < info.receiverAlgoNeededForClaim frame_dig 8 // inboxAlgoAvailable: uint64 frame_dig 2 // info: SendAssetInfo @@ -608,7 +616,7 @@ arc59_getSendAssetInfo: bz *if8_end // *if8_consequent - // contracts/arc59.algo.ts:152 + // contracts/arc59.algo.ts:155 // info.receiverAlgoNeededForClaim -= inboxAlgoAvailable frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -628,7 +636,7 @@ arc59_getSendAssetInfo: *if8_end: *if7_end: - // contracts/arc59.algo.ts:156 + // contracts/arc59.algo.ts:159 // return info; frame_dig 2 // info: SendAssetInfo @@ -690,7 +698,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:169 + // contracts/arc59.algo.ts:172 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -702,7 +710,7 @@ arc59_sendAsset: assert // *if9_condition - // contracts/arc59.algo.ts:174 + // contracts/arc59.algo.ts:177 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -713,7 +721,7 @@ arc59_sendAsset: bz *if9_end // *if9_consequent - // contracts/arc59.algo.ts:175 + // contracts/arc59.algo.ts:178 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -723,18 +731,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:176 + // contracts/arc59.algo.ts:179 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:177 + // contracts/arc59.algo.ts:180 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:178 + // contracts/arc59.algo.ts:181 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -748,7 +756,7 @@ arc59_sendAsset: itxn_submit // *if10_condition - // contracts/arc59.algo.ts:181 + // contracts/arc59.algo.ts:184 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -756,7 +764,7 @@ arc59_sendAsset: bz *if10_end // *if10_consequent - // contracts/arc59.algo.ts:182 + // contracts/arc59.algo.ts:185 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -765,12 +773,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:183 + // contracts/arc59.algo.ts:186 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:184 + // contracts/arc59.algo.ts:187 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -783,13 +791,13 @@ arc59_sendAsset: itxn_submit *if10_end: - // contracts/arc59.algo.ts:188 + // contracts/arc59.algo.ts:191 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return *if9_end: - // contracts/arc59.algo.ts:191 + // contracts/arc59.algo.ts:194 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -797,14 +805,14 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:192 + // contracts/arc59.algo.ts:195 // inbox = this.arc59_getOrCreateInbox(receiver) frame_dig -2 // receiver: Address callsub arc59_getOrCreateInbox frame_bury 1 // inbox: address // *if11_condition - // contracts/arc59.algo.ts:194 + // contracts/arc59.algo.ts:197 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -812,7 +820,7 @@ arc59_sendAsset: bz *if11_end // *if11_consequent - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:198 // sendPayment({ // receiver: inbox, // amount: additionalReceiverFunds, @@ -821,12 +829,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:196 + // contracts/arc59.algo.ts:199 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:197 + // contracts/arc59.algo.ts:200 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -840,7 +848,7 @@ arc59_sendAsset: *if11_end: // *if12_condition - // contracts/arc59.algo.ts:201 + // contracts/arc59.algo.ts:204 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -852,20 +860,20 @@ arc59_sendAsset: bz *if12_end // *if12_consequent - // contracts/arc59.algo.ts:202 + // contracts/arc59.algo.ts:205 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 // *if13_condition - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:206 // !inboxExisted frame_dig 0 // inboxExisted: bool ! bz *if13_end // *if13_consequent - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:206 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance @@ -874,7 +882,7 @@ arc59_sendAsset: *if13_end: // *if14_condition - // contracts/arc59.algo.ts:206 + // contracts/arc59.algo.ts:209 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -888,7 +896,7 @@ arc59_sendAsset: bz *if14_end // *if14_consequent - // contracts/arc59.algo.ts:207 + // contracts/arc59.algo.ts:210 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -897,12 +905,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:208 + // contracts/arc59.algo.ts:211 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:209 + // contracts/arc59.algo.ts:212 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -915,7 +923,7 @@ arc59_sendAsset: itxn_submit *if14_end: - // contracts/arc59.algo.ts:214 + // contracts/arc59.algo.ts:217 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -926,22 +934,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:215 + // contracts/arc59.algo.ts:218 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:216 + // contracts/arc59.algo.ts:219 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:217 + // contracts/arc59.algo.ts:220 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:218 + // contracts/arc59.algo.ts:221 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -955,7 +963,7 @@ arc59_sendAsset: itxn_submit *if12_end: - // contracts/arc59.algo.ts:223 + // contracts/arc59.algo.ts:226 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -965,18 +973,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:224 + // contracts/arc59.algo.ts:227 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:225 + // contracts/arc59.algo.ts:228 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:226 + // contracts/arc59.algo.ts:229 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -989,7 +997,7 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:232 // return inbox; frame_dig 1 // inbox: address @@ -1023,14 +1031,14 @@ arc59_claim: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:238 + // contracts/arc59.algo.ts:241 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:240 + // contracts/arc59.algo.ts:243 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -1042,17 +1050,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:241 + // contracts/arc59.algo.ts:244 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:242 + // contracts/arc59.algo.ts:245 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:243 + // contracts/arc59.algo.ts:246 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1060,12 +1068,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:244 + // contracts/arc59.algo.ts:247 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:245 + // contracts/arc59.algo.ts:248 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -1077,7 +1085,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:248 + // contracts/arc59.algo.ts:251 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1087,17 +1095,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:249 + // contracts/arc59.algo.ts:252 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:250 + // contracts/arc59.algo.ts:253 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:251 + // contracts/arc59.algo.ts:254 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1139,14 +1147,14 @@ arc59_reject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:262 + // contracts/arc59.algo.ts:265 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:264 + // contracts/arc59.algo.ts:267 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1158,19 +1166,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:265 + // contracts/arc59.algo.ts:268 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:266 + // contracts/arc59.algo.ts:269 // assetReceiver: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator pop itxn_field AssetReceiver - // contracts/arc59.algo.ts:267 + // contracts/arc59.algo.ts:270 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1178,12 +1186,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:268 + // contracts/arc59.algo.ts:271 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:269 + // contracts/arc59.algo.ts:272 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1197,7 +1205,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:272 + // contracts/arc59.algo.ts:275 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1207,17 +1215,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:273 + // contracts/arc59.algo.ts:276 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:274 + // contracts/arc59.algo.ts:277 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:275 + // contracts/arc59.algo.ts:278 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1266,7 +1274,7 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:287 + // contracts/arc59.algo.ts:290 // return this.inboxes(receiver).exists ? this.inboxes(receiver).value : globals.zeroAddress; frame_dig -1 // receiver: Address box_len @@ -1300,14 +1308,14 @@ arc59_claimAlgo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:292 + // contracts/arc59.algo.ts:295 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:294 + // contracts/arc59.algo.ts:297 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1320,7 +1328,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:296 + // contracts/arc59.algo.ts:299 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1330,17 +1338,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:297 + // contracts/arc59.algo.ts:300 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:298 + // contracts/arc59.algo.ts:301 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:299 + // contracts/arc59.algo.ts:302 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1368,7 +1376,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 35dfc868f..769853d10 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": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NAoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDkKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTAKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MQoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OQoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NgoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MgoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjUKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDIKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjQKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjYKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjczCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzQKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODcKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NAoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk2CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", "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 9fba7fb18..dc16cc8b8 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, @@ -25,7 +25,7 @@ }, { "teal": 13, - "source": 33, + "source": 35, "pc": [ 18, 19 @@ -33,14 +33,14 @@ }, { "teal": 14, - "source": 33, + "source": 35, "pc": [ 20 ] }, { "teal": 15, - "source": 33, + "source": 35, "pc": [ 21, 22 @@ -48,14 +48,14 @@ }, { "teal": 16, - "source": 33, + "source": 35, "pc": [ 23 ] }, { "teal": 17, - "source": 33, + "source": 35, "pc": [ 24, 25 @@ -63,14 +63,14 @@ }, { "teal": 18, - "source": 33, + "source": 35, "pc": [ 26 ] }, { "teal": 19, - "source": 33, + "source": 35, "pc": [ 27, 28, @@ -102,14 +102,14 @@ }, { "teal": 22, - "source": 33, + "source": 35, "pc": [ 53 ] }, { "teal": 27, - "source": 40, + "source": 42, "pc": [ 54, 55, @@ -118,21 +118,21 @@ }, { "teal": 28, - "source": 40, + "source": 42, "pc": [ 57 ] }, { "teal": 29, - "source": 40, + "source": 42, "pc": [ 58 ] }, { "teal": 35, - "source": 40, + "source": 42, "pc": [ 59, 60, @@ -141,14 +141,14 @@ }, { "teal": 36, - "source": 40, + "source": 42, "pc": [ 62 ] }, { "teal": 41, - "source": 47, + "source": 49, "pc": [ 63, 64, @@ -157,14 +157,14 @@ }, { "teal": 42, - "source": 47, + "source": 49, "pc": [ 66 ] }, { "teal": 45, - "source": 47, + "source": 49, "pc": [ 67, 68, @@ -173,21 +173,21 @@ }, { "teal": 46, - "source": 47, + "source": 49, "pc": [ 70 ] }, { "teal": 47, - "source": 47, + "source": 49, "pc": [ 71 ] }, { "teal": 55, - "source": 47, + "source": 49, "pc": [ 72, 73, @@ -196,21 +196,21 @@ }, { "teal": 63, - "source": 48, + "source": 50, "pc": [ 75 ] }, { "teal": 64, - "source": 48, + "source": 50, "pc": [ 76 ] }, { "teal": 65, - "source": 48, + "source": 50, "pc": [ 77, 78 @@ -218,7 +218,7 @@ }, { "teal": 69, - "source": 49, + "source": 51, "pc": [ 79, 80 @@ -226,7 +226,7 @@ }, { "teal": 70, - "source": 49, + "source": 51, "pc": [ 81, 82 @@ -234,14 +234,14 @@ }, { "teal": 74, - "source": 50, + "source": 52, "pc": [ 83 ] }, { "teal": 75, - "source": 50, + "source": 52, "pc": [ 84, 85 @@ -249,7 +249,7 @@ }, { "teal": 79, - "source": 51, + "source": 53, "pc": [ 86, 87 @@ -257,7 +257,7 @@ }, { "teal": 80, - "source": 51, + "source": 53, "pc": [ 88, 89 @@ -265,14 +265,14 @@ }, { "teal": 83, - "source": 48, + "source": 50, "pc": [ 90 ] }, { "teal": 84, - "source": 48, + "source": 50, "pc": [ 91, 92 @@ -280,28 +280,28 @@ }, { "teal": 87, - "source": 48, + "source": 50, "pc": [ 93 ] }, { "teal": 88, - "source": 47, + "source": 49, "pc": [ 94 ] }, { "teal": 93, - "source": 61, + "source": 63, "pc": [ 95 ] }, { "teal": 96, - "source": 61, + "source": 63, "pc": [ 96, 97, @@ -310,42 +310,42 @@ }, { "teal": 97, - "source": 61, + "source": 63, "pc": [ 99 ] }, { "teal": 98, - "source": 61, + "source": 63, "pc": [ 100 ] }, { "teal": 99, - "source": 61, + "source": 63, "pc": [ 101 ] }, { "teal": 100, - "source": 61, + "source": 63, "pc": [ 102 ] }, { "teal": 101, - "source": 61, + "source": 63, "pc": [ 103 ] }, { "teal": 104, - "source": 61, + "source": 63, "pc": [ 104, 105, @@ -354,35 +354,35 @@ }, { "teal": 105, - "source": 61, + "source": 63, "pc": [ 107 ] }, { "teal": 106, - "source": 61, + "source": 63, "pc": [ 108 ] }, { "teal": 107, - "source": 61, + "source": 63, "pc": [ 109 ] }, { "teal": 108, - "source": 61, + "source": 63, "pc": [ 110 ] }, { "teal": 117, - "source": 61, + "source": 63, "pc": [ 111, 112, @@ -391,14 +391,14 @@ }, { "teal": 120, - "source": 61, + "source": 63, "pc": [ 114 ] }, { "teal": 125, - "source": 62, + "source": 64, "pc": [ 115, 116 @@ -406,28 +406,28 @@ }, { "teal": 126, - "source": 62, + "source": 64, "pc": [ 117 ] }, { "teal": 127, - "source": 62, + "source": 64, "pc": [ 118 ] }, { "teal": 128, - "source": 62, + "source": 64, "pc": [ 119 ] }, { "teal": 129, - "source": 62, + "source": 64, "pc": [ 120, 121, @@ -436,7 +436,7 @@ }, { "teal": 134, - "source": 62, + "source": 64, "pc": [ 123, 124 @@ -444,21 +444,21 @@ }, { "teal": 135, - "source": 62, + "source": 64, "pc": [ 125 ] }, { "teal": 136, - "source": 62, + "source": 64, "pc": [ 126 ] }, { "teal": 137, - "source": 62, + "source": 64, "pc": [ 127, 128, @@ -467,14 +467,14 @@ }, { "teal": 146, - "source": 64, + "source": 66, "pc": [ 130 ] }, { "teal": 147, - "source": 64, + "source": 66, "pc": [ 131, 132 @@ -482,7 +482,7 @@ }, { "teal": 148, - "source": 64, + "source": 66, "pc": [ 133, 134 @@ -490,7 +490,7 @@ }, { "teal": 149, - "source": 64, + "source": 66, "pc": [ 135, 136, @@ -502,7 +502,7 @@ }, { "teal": 150, - "source": 64, + "source": 66, "pc": [ 141, 142 @@ -510,7 +510,7 @@ }, { "teal": 154, - "source": 65, + "source": 67, "pc": [ 143, 144 @@ -518,7 +518,7 @@ }, { "teal": 155, - "source": 65, + "source": 67, "pc": [ 145, 146 @@ -526,7 +526,7 @@ }, { "teal": 159, - "source": 66, + "source": 68, "pc": [ 147, 148, @@ -620,7 +620,7 @@ }, { "teal": 160, - "source": 66, + "source": 68, "pc": [ 235, 236 @@ -628,7 +628,7 @@ }, { "teal": 164, - "source": 67, + "source": 69, "pc": [ 237, 238, @@ -637,7 +637,7 @@ }, { "teal": 165, - "source": 67, + "source": 69, "pc": [ 240, 241 @@ -645,14 +645,14 @@ }, { "teal": 168, - "source": 64, + "source": 66, "pc": [ 242 ] }, { "teal": 169, - "source": 64, + "source": 66, "pc": [ 243, 244 @@ -660,14 +660,14 @@ }, { "teal": 172, - "source": 64, + "source": 66, "pc": [ 245 ] }, { "teal": 173, - "source": 64, + "source": 66, "pc": [ 246, 247 @@ -675,21 +675,21 @@ }, { "teal": 174, - "source": 64, + "source": 66, "pc": [ 248 ] }, { "teal": 175, - "source": 64, + "source": 66, "pc": [ 249 ] }, { "teal": 176, - "source": 64, + "source": 66, "pc": [ 250, 251 @@ -697,7 +697,7 @@ }, { "teal": 177, - "source": 64, + "source": 66, "pc": [ 252, 253, @@ -706,7 +706,7 @@ }, { "teal": 178, - "source": 64, + "source": 66, "pc": [ 255, 256 @@ -714,7 +714,7 @@ }, { "teal": 182, - "source": 70, + "source": 72, "pc": [ 257, 258 @@ -722,7 +722,7 @@ }, { "teal": 183, - "source": 70, + "source": 72, "pc": [ 259, 260 @@ -730,14 +730,14 @@ }, { "teal": 184, - "source": 70, + "source": 72, "pc": [ 261 ] }, { "teal": 188, - "source": 72, + "source": 74, "pc": [ 262, 263 @@ -745,7 +745,7 @@ }, { "teal": 192, - "source": 61, + "source": 63, "pc": [ 264, 265 @@ -753,21 +753,21 @@ }, { "teal": 193, - "source": 61, + "source": 63, "pc": [ 266 ] }, { "teal": 198, - "source": 84, + "source": 86, "pc": [ 267 ] }, { "teal": 201, - "source": 84, + "source": 86, "pc": [ 268, 269, @@ -776,14 +776,14 @@ }, { "teal": 202, - "source": 84, + "source": 86, "pc": [ 271 ] }, { "teal": 205, - "source": 84, + "source": 86, "pc": [ 272, 273, @@ -792,42 +792,42 @@ }, { "teal": 206, - "source": 84, + "source": 86, "pc": [ 275 ] }, { "teal": 207, - "source": 84, + "source": 86, "pc": [ 276 ] }, { "teal": 208, - "source": 84, + "source": 86, "pc": [ 277 ] }, { "teal": 209, - "source": 84, + "source": 86, "pc": [ 278 ] }, { "teal": 210, - "source": 84, + "source": 86, "pc": [ 279 ] }, { "teal": 213, - "source": 84, + "source": 86, "pc": [ 280, 281, @@ -836,35 +836,35 @@ }, { "teal": 214, - "source": 84, + "source": 86, "pc": [ 283 ] }, { "teal": 215, - "source": 84, + "source": 86, "pc": [ 284 ] }, { "teal": 216, - "source": 84, + "source": 86, "pc": [ 285 ] }, { "teal": 217, - "source": 84, + "source": 86, "pc": [ 286 ] }, { "teal": 229, - "source": 84, + "source": 86, "pc": [ 287, 288, @@ -873,14 +873,14 @@ }, { "teal": 232, - "source": 84, + "source": 86, "pc": [ 290 ] }, { "teal": 233, - "source": 84, + "source": 86, "pc": [ 291, 292 @@ -888,7 +888,7 @@ }, { "teal": 237, - "source": 85, + "source": 87, "pc": [ 293, 294 @@ -896,7 +896,7 @@ }, { "teal": 238, - "source": 85, + "source": 87, "pc": [ 295, 296 @@ -904,7 +904,7 @@ }, { "teal": 239, - "source": 85, + "source": 87, "pc": [ 297, 298 @@ -912,21 +912,21 @@ }, { "teal": 240, - "source": 85, + "source": 87, "pc": [ 299 ] }, { "teal": 241, - "source": 85, + "source": 87, "pc": [ 300 ] }, { "teal": 242, - "source": 85, + "source": 87, "pc": [ 301, 302 @@ -934,7 +934,7 @@ }, { "teal": 246, - "source": 86, + "source": 88, "pc": [ 303, 304 @@ -942,7 +942,7 @@ }, { "teal": 247, - "source": 86, + "source": 88, "pc": [ 305, 306 @@ -950,7 +950,7 @@ }, { "teal": 248, - "source": 86, + "source": 88, "pc": [ 307, 308 @@ -958,29 +958,29 @@ }, { "teal": 249, - "source": 86, + "source": 88, "pc": [ 309 ] }, { "teal": 250, - "source": 86, + "source": 88, "pc": [ 310 ] }, { "teal": 251, - "source": 86, + "source": 88, "pc": [ 311, 312 ] }, { - "teal": 261, - "source": 89, + "teal": 262, + "source": 91, "pc": [ 313, 314, @@ -1003,8 +1003,8 @@ ] }, { - "teal": 262, - "source": 90, + "teal": 263, + "source": 92, "pc": [ 331, 332, @@ -1012,59 +1012,59 @@ ] }, { - "teal": 263, - "source": 90, + "teal": 264, + "source": 92, "pc": [ 334 ] }, { - "teal": 264, - "source": 90, + "teal": 265, + "source": 92, "pc": [ 335, 336 ] }, { - "teal": 265, - "source": 90, + "teal": 266, + "source": 92, "pc": [ 337 ] }, { - "teal": 266, - "source": 91, + "teal": 267, + "source": 93, "pc": [ 338 ] }, { - "teal": 267, - "source": 91, + "teal": 268, + "source": 93, "pc": [ 339, 340 ] }, { - "teal": 268, - "source": 91, + "teal": 269, + "source": 93, "pc": [ 341 ] }, { - "teal": 269, - "source": 92, + "teal": 270, + "source": 94, "pc": [ 342 ] }, { - "teal": 270, - "source": 92, + "teal": 271, + "source": 94, "pc": [ 343, 344, @@ -1079,22 +1079,22 @@ ] }, { - "teal": 271, - "source": 92, + "teal": 272, + "source": 94, "pc": [ 353 ] }, { - "teal": 272, - "source": 87, + "teal": 273, + "source": 95, "pc": [ 354, 355 ] }, { - "teal": 277, + "teal": 274, "source": 95, "pc": [ 356, @@ -1102,102 +1102,108 @@ ] }, { - "teal": 278, + "teal": 275, + "source": 95, + "pc": [ + 358 + ] + }, + { + "teal": 276, "source": 95, "pc": [ - 358, 359, 360 ] }, { - "teal": 283, + "teal": 277, + "source": 95, + "pc": [ + 361 + ] + }, + { + "teal": 278, "source": 95, "pc": [ - 361, 362 ] }, { - "teal": 284, + "teal": 279, "source": 95, "pc": [ - 363, + 363 + ] + }, + { + "teal": 280, + "source": 89, + "pc": [ 364, 365 ] }, { - "teal": 289, - "source": 97, + "teal": 285, + "source": 98, "pc": [ 366, 367 ] }, { - "teal": 290, - "source": 97, + "teal": 286, + "source": 98, "pc": [ 368, - 369 - ] - }, - { - "teal": 291, - "source": 97, - "pc": [ + 369, 370 ] }, { - "teal": 292, - "source": 97, + "teal": 291, + "source": 98, "pc": [ 371, 372 ] }, { - "teal": 293, - "source": 97, - "pc": [ - 373 - ] - }, - { - "teal": 294, - "source": 97, + "teal": 292, + "source": 98, "pc": [ + 373, 374, 375 ] }, { - "teal": 295, - "source": 97, + "teal": 297, + "source": 100, "pc": [ - 376 + 376, + 377 ] }, { - "teal": 296, - "source": 97, + "teal": 298, + "source": 100, "pc": [ - 377, - 378 + 378, + 379 ] }, { - "teal": 301, + "teal": 299, "source": 100, "pc": [ - 379, 380 ] }, { - "teal": 302, + "teal": 300, "source": 100, "pc": [ 381, @@ -1205,14 +1211,14 @@ ] }, { - "teal": 303, + "teal": 301, "source": 100, "pc": [ 383 ] }, { - "teal": 304, + "teal": 302, "source": 100, "pc": [ 384, @@ -1220,1234 +1226,1240 @@ ] }, { - "teal": 305, + "teal": 303, "source": 100, "pc": [ 386 ] }, { - "teal": 306, + "teal": 304, "source": 100, "pc": [ 387, - 388, - 389 + 388 ] }, { - "teal": 311, - "source": 101, + "teal": 309, + "source": 103, "pc": [ - 390, - 391 + 389, + 390 ] }, { - "teal": 312, - "source": 101, + "teal": 310, + "source": 103, + "pc": [ + 391, + 392 + ] + }, + { + "teal": 311, + "source": 103, "pc": [ - 392, 393 ] }, { - "teal": 313, - "source": 101, + "teal": 312, + "source": 103, "pc": [ 394, 395 ] }, { - "teal": 314, - "source": 101, + "teal": 313, + "source": 103, "pc": [ - 396, - 397 + 396 ] }, { - "teal": 315, - "source": 101, + "teal": 314, + "source": 103, "pc": [ + 397, 398, 399 ] }, { - "teal": 316, - "source": 101, + "teal": 319, + "source": 104, "pc": [ 400, 401 ] }, { - "teal": 317, - "source": 101, + "teal": 320, + "source": 104, "pc": [ 402, 403 ] }, { - "teal": 318, - "source": 101, + "teal": 321, + "source": 104, "pc": [ 404, - 405, - 406 + 405 ] }, { - "teal": 319, - "source": 101, + "teal": 322, + "source": 104, "pc": [ + 406, 407 ] }, { - "teal": 320, - "source": 101, + "teal": 323, + "source": 104, "pc": [ 408, 409 ] }, { - "teal": 321, - "source": 101, + "teal": 324, + "source": 104, "pc": [ 410, 411 ] }, { - "teal": 322, - "source": 101, + "teal": 325, + "source": 104, "pc": [ 412, 413 ] }, { - "teal": 323, - "source": 101, + "teal": 326, + "source": 104, "pc": [ - 414 + 414, + 415, + 416 ] }, { - "teal": 324, - "source": 101, + "teal": 327, + "source": 104, "pc": [ - 415 + 417 ] }, { - "teal": 325, - "source": 101, + "teal": 328, + "source": 104, "pc": [ - 416 + 418, + 419 ] }, { - "teal": 326, - "source": 101, + "teal": 329, + "source": 104, "pc": [ - 417 + 420, + 421 ] }, { - "teal": 327, - "source": 101, + "teal": 330, + "source": 104, "pc": [ - 418 + 422, + 423 ] }, { - "teal": 328, - "source": 101, + "teal": 331, + "source": 104, "pc": [ - 419, - 420 + 424 ] }, { - "teal": 334, - "source": 105, + "teal": 332, + "source": 104, "pc": [ - 421, - 422 + 425 ] }, { - "teal": 335, - "source": 105, + "teal": 333, + "source": 104, "pc": [ - 423 + 426 ] }, { - "teal": 336, - "source": 105, + "teal": 334, + "source": 104, "pc": [ - 424, - 425, - 426 + 427 ] }, { - "teal": 341, - "source": 106, + "teal": 335, + "source": 104, "pc": [ - 427, 428 ] }, { - "teal": 342, - "source": 106, + "teal": 336, + "source": 104, "pc": [ 429, 430 ] }, { - "teal": 343, - "source": 106, + "teal": 342, + "source": 108, "pc": [ 431, 432 ] }, { - "teal": 344, - "source": 106, + "teal": 343, + "source": 108, "pc": [ - 433, - 434 + 433 ] }, { - "teal": 345, - "source": 106, + "teal": 344, + "source": 108, "pc": [ + 434, 435, 436 ] }, { - "teal": 346, - "source": 106, + "teal": 349, + "source": 109, "pc": [ 437, 438 ] }, { - "teal": 347, - "source": 106, + "teal": 350, + "source": 109, "pc": [ 439, 440 ] }, { - "teal": 348, - "source": 106, + "teal": 351, + "source": 109, "pc": [ 441, - 442, - 443 + 442 ] }, { - "teal": 349, - "source": 106, + "teal": 352, + "source": 109, "pc": [ + 443, 444 ] }, { - "teal": 350, - "source": 106, + "teal": 353, + "source": 109, "pc": [ 445, 446 ] }, { - "teal": 351, - "source": 106, + "teal": 354, + "source": 109, "pc": [ - 447 + 447, + 448 ] }, { - "teal": 352, - "source": 106, + "teal": 355, + "source": 109, "pc": [ - 448 + 449, + 450 ] }, { - "teal": 353, - "source": 106, + "teal": 356, + "source": 109, "pc": [ - 449 + 451, + 452, + 453 ] }, { - "teal": 354, - "source": 106, + "teal": 357, + "source": 109, "pc": [ - 450, - 451 + 454 ] }, { "teal": 358, - "source": 107, + "source": 109, "pc": [ - 452, - 453 + 455, + 456 ] }, { "teal": 359, - "source": 107, + "source": 109, "pc": [ - 454, - 455 + 457 ] }, { "teal": 360, - "source": 107, + "source": 109, "pc": [ - 456, - 457 + 458 ] }, { "teal": 361, - "source": 107, + "source": 109, "pc": [ - 458 + 459 ] }, { "teal": 362, - "source": 107, + "source": 109, "pc": [ - 459, - 460 + 460, + 461 ] }, { - "teal": 363, - "source": 107, + "teal": 366, + "source": 110, "pc": [ - 461, - 462 + 462, + 463 ] }, { - "teal": 364, - "source": 107, + "teal": 367, + "source": 110, "pc": [ - 463, - 464 + 464, + 465 ] }, { - "teal": 365, - "source": 107, + "teal": 368, + "source": 110, "pc": [ - 465, 466, 467 ] }, { - "teal": 366, - "source": 107, - "pc": [ - 468 - ] - }, - { - "teal": 367, - "source": 107, + "teal": 369, + "source": 110, "pc": [ - 469 + 468 ] }, { - "teal": 368, - "source": 107, + "teal": 370, + "source": 110, "pc": [ + 469, 470 ] }, { - "teal": 369, - "source": 107, - "pc": [ - 471 - ] - }, - { - "teal": 370, - "source": 107, + "teal": 371, + "source": 110, "pc": [ + 471, 472 ] }, { - "teal": 371, - "source": 107, + "teal": 372, + "source": 110, "pc": [ 473, 474 ] }, { - "teal": 377, + "teal": 373, "source": 110, "pc": [ 475, - 476 - ] - }, - { - "teal": 378, - "source": 110, - "pc": [ + 476, 477 ] }, { - "teal": 379, + "teal": 374, "source": 110, "pc": [ 478 ] }, { - "teal": 380, + "teal": 375, "source": 110, "pc": [ 479 ] }, { - "teal": 381, + "teal": 376, "source": 110, "pc": [ 480 ] }, { - "teal": 382, + "teal": 377, "source": 110, "pc": [ - 481, - 482, - 483 + 481 ] }, { - "teal": 387, - "source": 114, + "teal": 378, + "source": 110, "pc": [ - 484, - 485 + 482 ] }, { - "teal": 388, - "source": 114, + "teal": 379, + "source": 110, "pc": [ - 486, - 487 + 483, + 484 ] }, { - "teal": 389, - "source": 114, + "teal": 385, + "source": 113, "pc": [ - 488, - 489 + 485, + 486 ] }, { - "teal": 390, - "source": 114, + "teal": 386, + "source": 113, "pc": [ - 490 + 487 ] }, { - "teal": 391, - "source": 114, + "teal": 387, + "source": 113, "pc": [ - 491, - 492 + 488 ] }, { - "teal": 392, - "source": 114, + "teal": 388, + "source": 113, "pc": [ - 493, - 494 + 489 ] }, { - "teal": 393, - "source": 114, + "teal": 389, + "source": 113, "pc": [ - 495, - 496 + 490 ] }, { - "teal": 394, - "source": 114, + "teal": 390, + "source": 113, "pc": [ - 497, - 498, - 499 + 491, + 492, + 493 ] }, { "teal": 395, - "source": 114, + "source": 117, "pc": [ - 500 + 494, + 495 ] }, { "teal": 396, - "source": 114, + "source": 117, "pc": [ - 501 + 496, + 497 ] }, { "teal": 397, - "source": 114, + "source": 117, "pc": [ - 502 + 498, + 499 ] }, { "teal": 398, - "source": 114, + "source": 117, "pc": [ - 503 + 500 ] }, { "teal": 399, - "source": 114, + "source": 117, "pc": [ - 504 + 501, + 502 ] }, { "teal": 400, - "source": 114, + "source": 117, + "pc": [ + 503, + 504 + ] + }, + { + "teal": 401, + "source": 117, "pc": [ 505, 506 ] }, { - "teal": 404, + "teal": 402, "source": 117, "pc": [ 507, - 508 + 508, + 509 ] }, { - "teal": 405, + "teal": 403, "source": 117, "pc": [ - 509, 510 ] }, { - "teal": 406, + "teal": 404, "source": 117, "pc": [ 511 ] }, { - "teal": 407, + "teal": 405, + "source": 117, + "pc": [ + 512 + ] + }, + { + "teal": 406, "source": 117, "pc": [ - 512, 513 ] }, { - "teal": 411, - "source": 118, + "teal": 407, + "source": 117, "pc": [ - 514, - 515 + 514 ] }, { - "teal": 412, - "source": 118, + "teal": 408, + "source": 117, "pc": [ - 516, - 517 + 515, + 516 ] }, { - "teal": 413, - "source": 118, + "teal": 412, + "source": 120, "pc": [ + 517, 518 ] }, { - "teal": 417, - "source": 119, + "teal": 413, + "source": 120, "pc": [ 519, 520 ] }, { - "teal": 418, - "source": 119, + "teal": 414, + "source": 120, "pc": [ - 521, - 522 + 521 ] }, { - "teal": 419, - "source": 119, + "teal": 415, + "source": 120, "pc": [ + 522, 523 ] }, { - "teal": 420, - "source": 119, + "teal": 419, + "source": 121, "pc": [ 524, 525 ] }, { - "teal": 421, - "source": 119, + "teal": 420, + "source": 121, "pc": [ - 526 + 526, + 527 ] }, { - "teal": 422, - "source": 119, + "teal": 421, + "source": 121, "pc": [ - 527, 528 ] }, { - "teal": 426, - "source": 120, + "teal": 425, + "source": 122, "pc": [ 529, 530 ] }, { - "teal": 427, - "source": 120, + "teal": 426, + "source": 122, "pc": [ - 531 + 531, + 532 ] }, { - "teal": 431, - "source": 123, + "teal": 427, + "source": 122, "pc": [ - 532, 533 ] }, { - "teal": 432, - "source": 123, + "teal": 428, + "source": 122, "pc": [ 534, 535 ] }, { - "teal": 433, - "source": 123, + "teal": 429, + "source": 122, + "pc": [ + 536 + ] + }, + { + "teal": 430, + "source": 122, "pc": [ - 536, - 537 + 537, + 538 ] }, { "teal": 434, "source": 123, "pc": [ - 538, - 539 + 539, + 540 ] }, { "teal": 435, "source": 123, "pc": [ - 540, 541 ] }, { - "teal": 436, - "source": 123, + "teal": 439, + "source": 126, "pc": [ 542, 543 ] }, { - "teal": 437, - "source": 123, + "teal": 440, + "source": 126, "pc": [ 544, 545 ] }, { - "teal": 438, - "source": 123, + "teal": 441, + "source": 126, "pc": [ 546, - 547, - 548 + 547 ] }, { - "teal": 439, - "source": 123, + "teal": 442, + "source": 126, "pc": [ + 548, 549 ] }, { - "teal": 440, - "source": 123, + "teal": 443, + "source": 126, "pc": [ 550, 551 ] }, { - "teal": 441, - "source": 123, + "teal": 444, + "source": 126, "pc": [ 552, 553 ] }, { - "teal": 442, - "source": 123, + "teal": 445, + "source": 126, "pc": [ - 554 + 554, + 555 ] }, { - "teal": 443, - "source": 123, + "teal": 446, + "source": 126, "pc": [ - 555, - 556 + 556, + 557, + 558 ] }, { - "teal": 444, - "source": 123, + "teal": 447, + "source": 126, "pc": [ - 557 + 559 ] }, { - "teal": 445, - "source": 123, + "teal": 448, + "source": 126, "pc": [ - 558 + 560, + 561 ] }, { - "teal": 446, - "source": 123, + "teal": 449, + "source": 126, "pc": [ - 559 + 562, + 563 ] }, { - "teal": 447, - "source": 123, + "teal": 450, + "source": 126, "pc": [ - 560 + 564 ] }, { - "teal": 448, - "source": 123, + "teal": 451, + "source": 126, "pc": [ - 561, - 562 + 565, + 566 ] }, { "teal": 452, - "source": 125, + "source": 126, "pc": [ - 563, - 564 + 567 ] }, { "teal": 453, - "source": 125, + "source": 126, "pc": [ - 565, - 566, - 567 + 568 ] }, { - "teal": 458, - "source": 128, + "teal": 454, + "source": 126, "pc": [ - 568, 569 ] }, { - "teal": 459, - "source": 128, + "teal": 455, + "source": 126, "pc": [ 570 ] }, { - "teal": 460, - "source": 128, + "teal": 456, + "source": 126, "pc": [ - 571 + 571, + 572 ] }, { - "teal": 461, + "teal": 460, "source": 128, "pc": [ - 572, - 573 - ] - }, - { - "teal": 466, - "source": 130, - "pc": [ - 574, - 575 + 573, + 574 ] }, { - "teal": 467, - "source": 130, + "teal": 461, + "source": 128, "pc": [ + 575, 576, 577 ] }, { - "teal": 468, - "source": 130, + "teal": 466, + "source": 131, "pc": [ 578, 579 ] }, { - "teal": 469, - "source": 130, + "teal": 467, + "source": 131, "pc": [ 580 ] }, { - "teal": 470, - "source": 130, + "teal": 468, + "source": 131, "pc": [ 581 ] }, { - "teal": 471, - "source": 130, + "teal": 469, + "source": 131, "pc": [ - 582 + 582, + 583 ] }, { - "teal": 472, - "source": 130, + "teal": 474, + "source": 133, "pc": [ - 583, 584, 585 ] }, { - "teal": 477, - "source": 132, + "teal": 475, + "source": 133, "pc": [ 586, 587 ] }, { - "teal": 478, - "source": 132, + "teal": 476, + "source": 133, "pc": [ 588, 589 ] }, { - "teal": 479, - "source": 132, + "teal": 477, + "source": 133, + "pc": [ + 590 + ] + }, + { + "teal": 478, + "source": 133, "pc": [ - 590, 591 ] }, { - "teal": 480, - "source": 132, + "teal": 479, + "source": 133, "pc": [ 592 ] }, { - "teal": 481, - "source": 132, + "teal": 480, + "source": 133, "pc": [ 593, - 594 + 594, + 595 ] }, { - "teal": 482, - "source": 132, + "teal": 485, + "source": 135, "pc": [ - 595, - 596 + 596, + 597 ] }, { - "teal": 483, - "source": 132, + "teal": 486, + "source": 135, "pc": [ - 597, - 598 + 598, + 599 ] }, { - "teal": 484, - "source": 132, + "teal": 487, + "source": 135, "pc": [ - 599, 600, 601 ] }, { - "teal": 485, - "source": 132, + "teal": 488, + "source": 135, "pc": [ 602 ] }, { - "teal": 486, - "source": 132, - "pc": [ - 603 - ] - }, - { - "teal": 487, - "source": 132, + "teal": 489, + "source": 135, "pc": [ + 603, 604 ] }, { - "teal": 488, - "source": 132, - "pc": [ - 605 - ] - }, - { - "teal": 489, - "source": 132, + "teal": 490, + "source": 135, "pc": [ + 605, 606 ] }, { - "teal": 490, - "source": 132, + "teal": 491, + "source": 135, "pc": [ 607, 608 ] }, { - "teal": 495, - "source": 134, + "teal": 492, + "source": 135, "pc": [ 609, - 610 + 610, + 611 ] }, { - "teal": 496, - "source": 134, + "teal": 493, + "source": 135, "pc": [ - 611, 612 ] }, { - "teal": 497, - "source": 134, + "teal": 494, + "source": 135, "pc": [ 613 ] }, { - "teal": 498, - "source": 134, + "teal": 495, + "source": 135, + "pc": [ + 614 + ] + }, + { + "teal": 496, + "source": 135, "pc": [ - 614, 615 ] }, { - "teal": 499, - "source": 134, + "teal": 497, + "source": 135, "pc": [ - 616, - 617 + 616 ] }, { - "teal": 500, - "source": 134, + "teal": 498, + "source": 135, "pc": [ + 617, 618 ] }, { - "teal": 501, - "source": 134, + "teal": 503, + "source": 137, "pc": [ 619, 620 ] }, { - "teal": 502, - "source": 134, + "teal": 504, + "source": 137, "pc": [ - 621 + 621, + 622 ] }, { - "teal": 503, - "source": 134, + "teal": 505, + "source": 137, "pc": [ - 622 + 623 ] }, { - "teal": 504, - "source": 134, + "teal": 506, + "source": 137, "pc": [ - 623 + 624, + 625 ] }, { - "teal": 505, - "source": 134, + "teal": 507, + "source": 137, "pc": [ - 624, - 625, - 626 + 626, + 627 ] }, { - "teal": 510, - "source": 136, + "teal": 508, + "source": 137, "pc": [ - 627, 628 ] }, { - "teal": 511, - "source": 136, + "teal": 509, + "source": 137, "pc": [ 629, 630 ] }, { - "teal": 512, - "source": 136, + "teal": 510, + "source": 137, + "pc": [ + 631 + ] + }, + { + "teal": 511, + "source": 137, "pc": [ - 631, 632 ] }, { - "teal": 513, - "source": 136, + "teal": 512, + "source": 137, "pc": [ 633 ] }, { - "teal": 514, - "source": 136, + "teal": 513, + "source": 137, "pc": [ 634, - 635 + 635, + 636 ] }, { - "teal": 515, - "source": 136, + "teal": 518, + "source": 139, "pc": [ - 636, - 637 + 637, + 638 ] }, { - "teal": 516, - "source": 136, + "teal": 519, + "source": 139, "pc": [ - 638, - 639 + 639, + 640 ] }, { - "teal": 517, - "source": 136, + "teal": 520, + "source": 139, "pc": [ - 640, 641, 642 ] }, { - "teal": 518, - "source": 136, + "teal": 521, + "source": 139, "pc": [ 643 ] }, { - "teal": 519, - "source": 136, + "teal": 522, + "source": 139, "pc": [ - 644 + 644, + 645 ] }, { - "teal": 520, - "source": 136, + "teal": 523, + "source": 139, "pc": [ - 645 + 646, + 647 ] }, { - "teal": 521, - "source": 136, + "teal": 524, + "source": 139, "pc": [ - 646 + 648, + 649 ] }, { - "teal": 522, - "source": 136, + "teal": 525, + "source": 139, "pc": [ - 647 + 650, + 651, + 652 ] }, { - "teal": 523, - "source": 136, + "teal": 526, + "source": 139, "pc": [ - 648, - 649 + 653 ] }, { "teal": 527, "source": 139, "pc": [ - 650, - 651 + 654 ] }, { "teal": 528, "source": 139, "pc": [ - 652, - 653 + 655 ] }, { "teal": 529, "source": 139, "pc": [ - 654, - 655 + 656 ] }, { "teal": 530, "source": 139, "pc": [ - 656, 657 ] }, @@ -2460,937 +2472,937 @@ ] }, { - "teal": 532, - "source": 139, + "teal": 535, + "source": 142, "pc": [ 660, 661 ] }, { - "teal": 533, - "source": 139, + "teal": 536, + "source": 142, "pc": [ 662, 663 ] }, { - "teal": 534, - "source": 139, + "teal": 537, + "source": 142, "pc": [ 664, - 665, - 666 + 665 ] }, { - "teal": 535, - "source": 139, + "teal": 538, + "source": 142, "pc": [ + 666, 667 ] }, { - "teal": 536, - "source": 139, + "teal": 539, + "source": 142, "pc": [ 668, 669 ] }, { - "teal": 537, - "source": 139, - "pc": [ - 670 - ] - }, - { - "teal": 538, - "source": 139, + "teal": 540, + "source": 142, "pc": [ + 670, 671 ] }, { - "teal": 539, - "source": 139, + "teal": 541, + "source": 142, "pc": [ - 672 + 672, + 673 ] }, { - "teal": 540, - "source": 139, + "teal": 542, + "source": 142, "pc": [ - 673, - 674 + 674, + 675, + 676 ] }, { - "teal": 548, - "source": 144, + "teal": 543, + "source": 142, "pc": [ - 675, - 676 + 677 ] }, { - "teal": 549, - "source": 144, + "teal": 544, + "source": 142, "pc": [ - 677, - 678 + 678, + 679 ] }, { - "teal": 550, - "source": 144, + "teal": 545, + "source": 142, "pc": [ - 679 + 680 ] }, { - "teal": 551, - "source": 144, + "teal": 546, + "source": 142, "pc": [ - 680, 681 ] }, { - "teal": 552, - "source": 144, + "teal": 547, + "source": 142, "pc": [ - 682, - 683 + 682 ] }, { - "teal": 553, - "source": 144, + "teal": 548, + "source": 142, "pc": [ + 683, 684 ] }, { - "teal": 554, - "source": 144, + "teal": 556, + "source": 147, "pc": [ - 685 + 685, + 686 ] }, { - "teal": 555, - "source": 144, + "teal": 557, + "source": 147, "pc": [ - 686 + 687, + 688 ] }, { - "teal": 556, - "source": 144, + "teal": 558, + "source": 147, "pc": [ - 687, - 688, 689 ] }, { - "teal": 557, - "source": 144, + "teal": 559, + "source": 147, "pc": [ 690, 691 ] }, { - "teal": 558, - "source": 144, + "teal": 560, + "source": 147, "pc": [ 692, 693 ] }, { - "teal": 559, - "source": 144, + "teal": 561, + "source": 147, "pc": [ - 694, - 695 + 694 ] }, { - "teal": 560, - "source": 144, + "teal": 562, + "source": 147, "pc": [ - 696, - 697, - 698 + 695 ] }, { - "teal": 561, - "source": 144, + "teal": 563, + "source": 147, "pc": [ - 699 + 696 ] }, { - "teal": 562, - "source": 144, + "teal": 564, + "source": 147, "pc": [ - 700 + 697, + 698, + 699 ] }, { - "teal": 563, - "source": 144, + "teal": 565, + "source": 147, "pc": [ + 700, 701 ] }, { - "teal": 564, - "source": 144, + "teal": 566, + "source": 147, "pc": [ - 702 + 702, + 703 ] }, { "teal": 567, - "source": 144, + "source": 147, "pc": [ - 703, 704, 705 ] }, { - "teal": 572, - "source": 149, + "teal": 568, + "source": 147, "pc": [ 706, - 707 + 707, + 708 ] }, { - "teal": 573, - "source": 149, + "teal": 569, + "source": 147, "pc": [ - 708, 709 ] }, { - "teal": 574, - "source": 149, + "teal": 570, + "source": 147, "pc": [ - 710, - 711 + 710 ] }, { - "teal": 575, - "source": 149, + "teal": 571, + "source": 147, "pc": [ - 712, - 713 + 711 ] }, { - "teal": 576, - "source": 149, + "teal": 572, + "source": 147, "pc": [ - 714, - 715, - 716 + 712 ] }, { - "teal": 577, - "source": 149, + "teal": 575, + "source": 147, "pc": [ - 717 + 713, + 714, + 715 ] }, { - "teal": 578, - "source": 149, + "teal": 580, + "source": 152, "pc": [ - 718 + 716, + 717 ] }, { - "teal": 579, - "source": 149, + "teal": 581, + "source": 152, "pc": [ + 718, 719 ] }, { - "teal": 580, - "source": 149, + "teal": 582, + "source": 152, "pc": [ 720, 721 ] }, { - "teal": 581, - "source": 149, + "teal": 583, + "source": 152, "pc": [ - 722 + 722, + 723 ] }, { - "teal": 582, - "source": 149, + "teal": 584, + "source": 152, "pc": [ - 723 + 724, + 725, + 726 ] }, { - "teal": 583, - "source": 149, + "teal": 585, + "source": 152, "pc": [ - 724, - 725 + 727 + ] + }, + { + "teal": 586, + "source": 152, + "pc": [ + 728 ] }, { "teal": 587, - "source": 150, + "source": 152, "pc": [ - 726, - 727 + 729 ] }, { "teal": 588, - "source": 150, + "source": 152, "pc": [ - 728, - 729 + 730, + 731 ] }, { "teal": 589, - "source": 150, + "source": 152, "pc": [ - 730 + 732 ] }, { "teal": 590, - "source": 150, + "source": 152, "pc": [ - 731, - 732 + 733 ] }, { "teal": 591, - "source": 150, + "source": 152, "pc": [ - 733, - 734 + 734, + 735 ] }, { - "teal": 592, - "source": 150, + "teal": 595, + "source": 153, "pc": [ - 735 + 736, + 737 ] }, { - "teal": 593, - "source": 150, + "teal": 596, + "source": 153, "pc": [ - 736 + 738, + 739 ] }, { - "teal": 594, - "source": 150, + "teal": 597, + "source": 153, "pc": [ - 737, - 738 + 740 ] }, { - "teal": 595, - "source": 150, + "teal": 598, + "source": 153, "pc": [ - 739 + 741, + 742 ] }, { - "teal": 596, - "source": 150, + "teal": 599, + "source": 153, "pc": [ - 740, - 741 + 743, + 744 ] }, { - "teal": 601, - "source": 151, + "teal": 600, + "source": 153, "pc": [ - 742, - 743 + 745 ] }, { - "teal": 602, - "source": 151, + "teal": 601, + "source": 153, "pc": [ - 744, - 745 + 746 ] }, { - "teal": 603, - "source": 151, + "teal": 602, + "source": 153, "pc": [ - 746, - 747 + 747, + 748 ] }, { - "teal": 604, - "source": 151, + "teal": 603, + "source": 153, "pc": [ - 748, 749 ] }, { - "teal": 605, - "source": 151, + "teal": 604, + "source": 153, "pc": [ 750, - 751, - 752 + 751 ] }, { - "teal": 606, - "source": 151, + "teal": 609, + "source": 154, "pc": [ + 752, 753 ] }, { - "teal": 607, - "source": 151, + "teal": 610, + "source": 154, "pc": [ - 754 + 754, + 755 ] }, { - "teal": 608, - "source": 151, + "teal": 611, + "source": 154, "pc": [ - 755, 756, 757 ] }, { - "teal": 613, - "source": 152, + "teal": 612, + "source": 154, "pc": [ 758, 759 ] }, { - "teal": 614, - "source": 152, + "teal": 613, + "source": 154, "pc": [ 760, - 761 + 761, + 762 ] }, { - "teal": 615, - "source": 152, + "teal": 614, + "source": 154, "pc": [ - 762, 763 ] }, { - "teal": 616, - "source": 152, + "teal": 615, + "source": 154, "pc": [ - 764, - 765 + 764 ] }, { - "teal": 617, - "source": 152, + "teal": 616, + "source": 154, "pc": [ + 765, 766, 767 ] }, { - "teal": 618, - "source": 152, + "teal": 621, + "source": 155, "pc": [ 768, 769 ] }, { - "teal": 619, - "source": 152, + "teal": 622, + "source": 155, "pc": [ 770, 771 ] }, { - "teal": 620, - "source": 152, + "teal": 623, + "source": 155, "pc": [ 772, - 773, - 774 + 773 ] }, { - "teal": 621, - "source": 152, + "teal": 624, + "source": 155, "pc": [ + 774, 775 ] }, { - "teal": 622, - "source": 152, + "teal": 625, + "source": 155, "pc": [ 776, 777 ] }, { - "teal": 623, - "source": 152, - "pc": [ - 778 - ] - }, - { - "teal": 624, - "source": 152, + "teal": 626, + "source": 155, "pc": [ + 778, 779 ] }, { - "teal": 625, - "source": 152, + "teal": 627, + "source": 155, "pc": [ - 780 + 780, + 781 ] }, { - "teal": 626, - "source": 152, + "teal": 628, + "source": 155, "pc": [ - 781, - 782 + 782, + 783, + 784 ] }, { - "teal": 633, - "source": 156, + "teal": 629, + "source": 155, "pc": [ - 783, - 784 + 785 ] }, { - "teal": 637, - "source": 84, + "teal": 630, + "source": 155, "pc": [ - 785, - 786 + 786, + 787 ] }, { - "teal": 640, - "source": 84, + "teal": 631, + "source": 155, "pc": [ - 787, 788 ] }, { - "teal": 641, - "source": 84, + "teal": 632, + "source": 155, "pc": [ 789 ] }, { - "teal": 646, - "source": 168, + "teal": 633, + "source": 155, "pc": [ 790 ] }, { - "teal": 649, - "source": 168, + "teal": 634, + "source": 155, "pc": [ 791, - 792, - 793 + 792 ] }, { - "teal": 650, - "source": 168, + "teal": 641, + "source": 159, "pc": [ + 793, 794 ] }, { - "teal": 653, - "source": 168, + "teal": 645, + "source": 86, "pc": [ 795, - 796, - 797 + 796 ] }, { - "teal": 654, - "source": 168, + "teal": 648, + "source": 86, "pc": [ + 797, 798 ] }, { - "teal": 655, - "source": 168, + "teal": 649, + "source": 86, "pc": [ 799 ] }, { - "teal": 656, - "source": 168, + "teal": 654, + "source": 171, "pc": [ 800 ] }, { "teal": 657, - "source": 168, + "source": 171, "pc": [ - 801 + 801, + 802, + 803 ] }, { "teal": 658, - "source": 168, + "source": 171, "pc": [ - 802 + 804 ] }, { "teal": 661, - "source": 168, + "source": 171, "pc": [ - 803, - 804 + 805, + 806, + 807 ] }, { "teal": 662, - "source": 168, + "source": 171, "pc": [ - 805 + 808 ] }, { "teal": 663, - "source": 168, + "source": 171, "pc": [ - 806 + 809 ] }, { "teal": 664, - "source": 168, + "source": 171, "pc": [ - 807 + 810 ] }, { "teal": 665, - "source": 168, + "source": 171, "pc": [ - 808, - 809 + 811 ] }, { "teal": 666, - "source": 168, + "source": 171, "pc": [ - 810 + 812 ] }, { - "teal": 667, - "source": 168, + "teal": 669, + "source": 171, "pc": [ - 811 + 813, + 814 ] }, { - "teal": 668, - "source": 168, + "teal": 670, + "source": 171, "pc": [ - 812 + 815 ] }, { "teal": 671, - "source": 168, + "source": 171, "pc": [ - 813, - 814, - 815 + 816 ] }, { "teal": 672, - "source": 168, + "source": 171, "pc": [ - 816 + 817 ] }, { "teal": 673, - "source": 168, + "source": 171, "pc": [ - 817 + 818, + 819 ] }, { "teal": 674, - "source": 168, + "source": 171, "pc": [ - 818 + 820 ] }, { "teal": 675, - "source": 168, + "source": 171, "pc": [ - 819 + 821 ] }, { - "teal": 687, - "source": 168, + "teal": 676, + "source": 171, "pc": [ - 820, - 821, 822 ] }, { - "teal": 690, - "source": 168, + "teal": 679, + "source": 171, "pc": [ - 823 + 823, + 824, + 825 ] }, { - "teal": 691, - "source": 168, + "teal": 680, + "source": 171, "pc": [ - 824, - 825 + 826 ] }, { - "teal": 698, - "source": 169, + "teal": 681, + "source": 171, "pc": [ - 826, 827 ] }, { - "teal": 699, - "source": 170, + "teal": 682, + "source": 171, "pc": [ - 828, - 829 + 828 ] }, { - "teal": 700, - "source": 170, + "teal": 683, + "source": 171, "pc": [ - 830, - 831 + 829 ] }, { - "teal": 701, - "source": 170, + "teal": 695, + "source": 171, "pc": [ + 830, + 831, 832 ] }, { - "teal": 702, - "source": 170, + "teal": 698, + "source": 171, "pc": [ 833 ] }, { - "teal": 707, - "source": 174, + "teal": 699, + "source": 171, "pc": [ 834, 835 ] }, { - "teal": 708, - "source": 174, + "teal": 706, + "source": 172, "pc": [ 836, 837 ] }, { - "teal": 709, - "source": 174, + "teal": 707, + "source": 173, "pc": [ 838, 839 ] }, { - "teal": 710, - "source": 174, + "teal": 708, + "source": 173, "pc": [ 840, 841 ] }, { - "teal": 711, - "source": 174, + "teal": 709, + "source": 173, "pc": [ 842 ] }, { - "teal": 712, - "source": 174, + "teal": 710, + "source": 173, "pc": [ 843 ] }, { - "teal": 713, - "source": 174, + "teal": 715, + "source": 177, "pc": [ 844, - 845, - 846 + 845 ] }, { - "teal": 722, - "source": 175, + "teal": 716, + "source": 177, "pc": [ + 846, 847 ] }, { - "teal": 723, - "source": 175, + "teal": 717, + "source": 177, "pc": [ - 848 + 848, + 849 ] }, { - "teal": 724, - "source": 175, + "teal": 718, + "source": 177, "pc": [ - 849, - 850 + 850, + 851 ] }, { - "teal": 728, - "source": 176, + "teal": 719, + "source": 177, "pc": [ - 851, 852 ] }, { - "teal": 729, - "source": 176, + "teal": 720, + "source": 177, "pc": [ - 853, - 854 + 853 ] }, { - "teal": 733, + "teal": 721, "source": 177, "pc": [ + 854, 855, 856 ] }, { - "teal": 734, - "source": 177, + "teal": 730, + "source": 178, + "pc": [ + 857 + ] + }, + { + "teal": 731, + "source": 178, "pc": [ - 857, 858 ] }, { - "teal": 735, - "source": 177, + "teal": 732, + "source": 178, "pc": [ 859, 860 ] }, { - "teal": 739, - "source": 178, + "teal": 736, + "source": 179, "pc": [ 861, 862 ] }, { - "teal": 740, - "source": 178, + "teal": 737, + "source": 179, "pc": [ 863, 864 @@ -3398,36 +3410,30 @@ }, { "teal": 741, - "source": 178, + "source": 180, "pc": [ 865, 866 ] }, { - "teal": 744, - "source": 175, - "pc": [ - 867 - ] - }, - { - "teal": 745, - "source": 175, + "teal": 742, + "source": 180, "pc": [ - 868, - 869 + 867, + 868 ] }, { - "teal": 748, - "source": 175, + "teal": 743, + "source": 180, "pc": [ + 869, 870 ] }, { - "teal": 753, + "teal": 747, "source": 181, "pc": [ 871, @@ -3435,152 +3441,152 @@ ] }, { - "teal": 754, + "teal": 748, "source": 181, "pc": [ - 873 + 873, + 874 ] }, { - "teal": 755, + "teal": 749, "source": 181, "pc": [ - 874 + 875, + 876 ] }, { - "teal": 756, - "source": 181, + "teal": 752, + "source": 178, "pc": [ - 875, - 876, 877 ] }, { - "teal": 764, - "source": 182, + "teal": 753, + "source": 178, "pc": [ - 878 + 878, + 879 ] }, { - "teal": 765, - "source": 182, + "teal": 756, + "source": 178, "pc": [ - 879 + 880 ] }, { - "teal": 766, - "source": 182, + "teal": 761, + "source": 184, "pc": [ - 880, - 881 + 881, + 882 ] }, { - "teal": 770, - "source": 183, + "teal": 762, + "source": 184, "pc": [ - 882, 883 ] }, { - "teal": 771, - "source": 183, + "teal": 763, + "source": 184, "pc": [ - 884, - 885 + 884 ] }, { - "teal": 775, + "teal": 764, "source": 184, "pc": [ + 885, 886, 887 ] }, { - "teal": 776, - "source": 184, + "teal": 772, + "source": 185, "pc": [ - 888, - 889 + 888 ] }, { - "teal": 779, - "source": 182, + "teal": 773, + "source": 185, "pc": [ - 890 + 889 ] }, { - "teal": 780, - "source": 182, + "teal": 774, + "source": 185, "pc": [ - 891, - 892 + 890, + 891 ] }, { - "teal": 783, - "source": 182, + "teal": 778, + "source": 186, "pc": [ + 892, 893 ] }, { - "teal": 788, - "source": 188, + "teal": 779, + "source": 186, "pc": [ 894, 895 ] }, { - "teal": 789, - "source": 188, + "teal": 783, + "source": 187, "pc": [ 896, - 897, - 898 + 897 ] }, { - "teal": 794, - "source": 191, + "teal": 784, + "source": 187, "pc": [ - 899, - 900 + 898, + 899 ] }, { - "teal": 795, - "source": 191, + "teal": 787, + "source": 185, "pc": [ - 901 + 900 ] }, { - "teal": 796, - "source": 191, + "teal": 788, + "source": 185, "pc": [ + 901, 902 ] }, { - "teal": 797, - "source": 191, + "teal": 791, + "source": 185, "pc": [ 903 ] }, { - "teal": 798, + "teal": 796, "source": 191, "pc": [ 904, @@ -3588,233 +3594,239 @@ ] }, { - "teal": 802, - "source": 192, + "teal": 797, + "source": 191, "pc": [ 906, - 907 + 907, + 908 ] }, { - "teal": 803, - "source": 192, + "teal": 802, + "source": 194, "pc": [ - 908, 909, 910 ] }, { - "teal": 804, - "source": 192, + "teal": 803, + "source": 194, "pc": [ - 911, - 912 + 911 ] }, { - "teal": 809, + "teal": 804, "source": 194, "pc": [ - 913, - 914 + 912 ] }, { - "teal": 810, + "teal": 805, "source": 194, "pc": [ - 915 + 913 ] }, { - "teal": 811, + "teal": 806, "source": 194, "pc": [ - 916 + 914, + 915 ] }, { - "teal": 812, - "source": 194, + "teal": 810, + "source": 195, "pc": [ - 917, - 918, - 919 + 916, + 917 ] }, { - "teal": 820, + "teal": 811, "source": 195, "pc": [ + 918, + 919, 920 ] }, { - "teal": 821, + "teal": 812, "source": 195, "pc": [ - 921 + 921, + 922 ] }, { - "teal": 822, - "source": 195, + "teal": 817, + "source": 197, "pc": [ - 922, - 923 + 923, + 924 ] }, { - "teal": 826, - "source": 196, + "teal": 818, + "source": 197, "pc": [ - 924, 925 ] }, { - "teal": 827, - "source": 196, + "teal": 819, + "source": 197, "pc": [ - 926, - 927 + 926 ] }, { - "teal": 831, + "teal": 820, "source": 197, "pc": [ + 927, 928, 929 ] }, { - "teal": 832, - "source": 197, + "teal": 828, + "source": 198, "pc": [ - 930, - 931 + 930 ] }, { - "teal": 835, - "source": 195, + "teal": 829, + "source": 198, "pc": [ - 932 + 931 ] }, { - "teal": 836, - "source": 195, + "teal": 830, + "source": 198, "pc": [ - 933, - 934 + 932, + 933 ] }, { - "teal": 839, - "source": 195, + "teal": 834, + "source": 199, "pc": [ + 934, 935 ] }, { - "teal": 845, - "source": 201, + "teal": 835, + "source": 199, "pc": [ 936, 937 ] }, { - "teal": 846, - "source": 201, + "teal": 839, + "source": 200, "pc": [ 938, 939 ] }, { - "teal": 847, - "source": 201, + "teal": 840, + "source": 200, "pc": [ 940, 941 ] }, { - "teal": 848, - "source": 201, + "teal": 843, + "source": 198, "pc": [ - 942, - 943 + 942 ] }, { - "teal": 849, - "source": 201, + "teal": 844, + "source": 198, "pc": [ + 943, 944 ] }, { - "teal": 850, - "source": 201, + "teal": 847, + "source": 198, "pc": [ 945 ] }, { - "teal": 851, - "source": 201, + "teal": 853, + "source": 204, "pc": [ - 946 + 946, + 947 ] }, { - "teal": 852, - "source": 201, + "teal": 854, + "source": 204, "pc": [ - 947, 948, 949 ] }, { - "teal": 857, - "source": 202, + "teal": 855, + "source": 204, "pc": [ 950, 951 ] }, { - "teal": 858, - "source": 202, + "teal": 856, + "source": 204, "pc": [ 952, 953 ] }, { - "teal": 863, - "source": 203, + "teal": 857, + "source": 204, + "pc": [ + 954 + ] + }, + { + "teal": 858, + "source": 204, "pc": [ - 954, 955 ] }, { - "teal": 864, - "source": 203, + "teal": 859, + "source": 204, "pc": [ 956 ] }, { - "teal": 865, - "source": 203, + "teal": 860, + "source": 204, "pc": [ 957, 958, @@ -3822,61 +3834,55 @@ ] }, { - "teal": 870, - "source": 203, + "teal": 865, + "source": 205, "pc": [ 960, 961 ] }, { - "teal": 871, - "source": 203, + "teal": 866, + "source": 205, "pc": [ 962, 963 ] }, { - "teal": 872, - "source": 203, + "teal": 871, + "source": 206, "pc": [ - 964 + 964, + 965 ] }, { - "teal": 873, - "source": 203, + "teal": 872, + "source": 206, "pc": [ - 965, 966 ] }, { - "teal": 879, + "teal": 873, "source": 206, "pc": [ 967, - 968 - ] - }, - { - "teal": 880, - "source": 206, - "pc": [ - 969, - 970 + 968, + 969 ] }, { - "teal": 881, + "teal": 878, "source": 206, "pc": [ + 970, 971 ] }, { - "teal": 882, + "teal": 879, "source": 206, "pc": [ 972, @@ -3884,315 +3890,321 @@ ] }, { - "teal": 883, + "teal": 880, "source": 206, "pc": [ - 974, - 975 + 974 ] }, { - "teal": 884, + "teal": 881, "source": 206, "pc": [ + 975, 976 ] }, { - "teal": 885, - "source": 206, + "teal": 887, + "source": 209, "pc": [ 977, 978 ] }, { - "teal": 886, - "source": 206, + "teal": 888, + "source": 209, "pc": [ - 979 + 979, + 980 ] }, { - "teal": 887, - "source": 206, + "teal": 889, + "source": 209, "pc": [ - 980 + 981 ] }, { - "teal": 888, - "source": 206, + "teal": 890, + "source": 209, "pc": [ - 981, 982, 983 ] }, { - "teal": 896, - "source": 207, + "teal": 891, + "source": 209, "pc": [ - 984 + 984, + 985 ] }, { - "teal": 897, - "source": 207, + "teal": 892, + "source": 209, "pc": [ - 985 + 986 ] }, { - "teal": 898, - "source": 207, + "teal": 893, + "source": 209, "pc": [ - 986, - 987 + 987, + 988 ] }, { - "teal": 902, - "source": 208, + "teal": 894, + "source": 209, "pc": [ - 988, 989 ] }, { - "teal": 903, - "source": 208, + "teal": 895, + "source": 209, "pc": [ - 990, - 991 + 990 ] }, { - "teal": 907, + "teal": 896, "source": 209, "pc": [ + 991, 992, 993 ] }, { - "teal": 908, - "source": 209, + "teal": 904, + "source": 210, "pc": [ - 994, - 995 + 994 ] }, { - "teal": 911, - "source": 207, + "teal": 905, + "source": 210, "pc": [ - 996 + 995 ] }, { - "teal": 912, - "source": 207, + "teal": 906, + "source": 210, "pc": [ - 997, - 998 + 996, + 997 ] }, { - "teal": 915, - "source": 207, + "teal": 910, + "source": 211, "pc": [ + 998, 999 ] }, { - "teal": 925, - "source": 214, - "pc": [ - 1000 - ] - }, - { - "teal": 926, - "source": 214, + "teal": 911, + "source": 211, "pc": [ + 1000, 1001 ] }, { - "teal": 927, - "source": 214, + "teal": 915, + "source": 212, "pc": [ 1002, 1003 ] }, { - "teal": 931, - "source": 215, + "teal": 916, + "source": 212, "pc": [ 1004, 1005 ] }, { - "teal": 932, - "source": 215, + "teal": 919, + "source": 210, "pc": [ - 1006, - 1007 + 1006 ] }, { - "teal": 936, - "source": 216, + "teal": 920, + "source": 210, "pc": [ - 1008, - 1009 + 1007, + 1008 ] }, { - "teal": 937, - "source": 216, + "teal": 923, + "source": 210, "pc": [ - 1010, - 1011 + 1009 ] }, { - "teal": 941, + "teal": 933, "source": 217, "pc": [ - 1012 + 1010 ] }, { - "teal": 942, + "teal": 934, "source": 217, "pc": [ - 1013, - 1014 + 1011 ] }, { - "teal": 946, - "source": 218, + "teal": 935, + "source": 217, "pc": [ - 1015, - 1016 + 1012, + 1013 ] }, { - "teal": 947, + "teal": 939, "source": 218, "pc": [ - 1017, - 1018 + 1014, + 1015 ] }, { - "teal": 948, + "teal": 940, "source": 218, "pc": [ - 1019, - 1020 + 1016, + 1017 ] }, { - "teal": 951, - "source": 214, + "teal": 944, + "source": 219, "pc": [ - 1021 + 1018, + 1019 ] }, { - "teal": 952, - "source": 214, + "teal": 945, + "source": 219, "pc": [ - 1022, - 1023 + 1020, + 1021 ] }, { - "teal": 955, - "source": 214, + "teal": 949, + "source": 220, "pc": [ - 1024 + 1022 ] }, { - "teal": 964, - "source": 223, + "teal": 950, + "source": 220, "pc": [ - 1025 + 1023, + 1024 ] }, { - "teal": 965, - "source": 223, + "teal": 954, + "source": 221, "pc": [ + 1025, 1026 ] }, { - "teal": 966, - "source": 223, + "teal": 955, + "source": 221, "pc": [ 1027, 1028 ] }, { - "teal": 970, - "source": 224, + "teal": 956, + "source": 221, "pc": [ 1029, 1030 ] }, { - "teal": 971, - "source": 224, + "teal": 959, + "source": 217, + "pc": [ + 1031 + ] + }, + { + "teal": 960, + "source": 217, "pc": [ - 1031, - 1032 + 1032, + 1033 ] }, { - "teal": 975, - "source": 225, + "teal": 963, + "source": 217, "pc": [ - 1033, 1034 ] }, { - "teal": 976, - "source": 225, + "teal": 972, + "source": 226, + "pc": [ + 1035 + ] + }, + { + "teal": 973, + "source": 226, "pc": [ - 1035, 1036 ] }, { - "teal": 977, - "source": 225, + "teal": 974, + "source": 226, "pc": [ 1037, 1038 ] }, { - "teal": 981, - "source": 226, + "teal": 978, + "source": 227, "pc": [ 1039, 1040 ] }, { - "teal": 982, - "source": 226, + "teal": 979, + "source": 227, "pc": [ 1041, 1042 @@ -4200,36 +4212,30 @@ }, { "teal": 983, - "source": 226, + "source": 228, "pc": [ 1043, 1044 ] }, { - "teal": 986, - "source": 223, - "pc": [ - 1045 - ] - }, - { - "teal": 987, - "source": 223, + "teal": 984, + "source": 228, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 990, - "source": 223, + "teal": 985, + "source": 228, "pc": [ + 1047, 1048 ] }, { - "teal": 994, + "teal": 989, "source": 229, "pc": [ 1049, @@ -4237,137 +4243,131 @@ ] }, { - "teal": 998, - "source": 168, + "teal": 990, + "source": 229, "pc": [ 1051, 1052 ] }, { - "teal": 1001, - "source": 168, + "teal": 991, + "source": 229, "pc": [ 1053, 1054 ] }, { - "teal": 1002, - "source": 168, + "teal": 994, + "source": 226, "pc": [ 1055 ] }, { - "teal": 1007, - "source": 237, + "teal": 995, + "source": 226, "pc": [ 1056, - 1057, - 1058 + 1057 ] }, { - "teal": 1008, - "source": 237, + "teal": 998, + "source": 226, "pc": [ - 1059 + 1058 ] }, { - "teal": 1011, - "source": 237, + "teal": 1002, + "source": 232, "pc": [ - 1060, - 1061, - 1062 + 1059, + 1060 ] }, { - "teal": 1012, - "source": 237, + "teal": 1006, + "source": 171, "pc": [ - 1063 + 1061, + 1062 ] }, { - "teal": 1013, - "source": 237, + "teal": 1009, + "source": 171, "pc": [ + 1063, 1064 ] }, { - "teal": 1021, - "source": 237, + "teal": 1010, + "source": 171, "pc": [ - 1065, - 1066, - 1067 + 1065 ] }, { - "teal": 1024, - "source": 237, + "teal": 1015, + "source": 240, "pc": [ + 1066, + 1067, 1068 ] }, { - "teal": 1028, - "source": 238, - "pc": [ - 1069, - 1070 - ] - }, - { - "teal": 1029, - "source": 238, + "teal": 1016, + "source": 240, "pc": [ - 1071 + 1069 ] }, { - "teal": 1030, - "source": 238, + "teal": 1019, + "source": 240, "pc": [ + 1070, + 1071, 1072 ] }, { - "teal": 1031, - "source": 238, + "teal": 1020, + "source": 240, "pc": [ - 1073, - 1074 + 1073 ] }, { - "teal": 1041, + "teal": 1021, "source": 240, "pc": [ - 1075 + 1074 ] }, { - "teal": 1042, + "teal": 1029, "source": 240, "pc": [ - 1076 + 1075, + 1076, + 1077 ] }, { - "teal": 1043, + "teal": 1032, "source": 240, "pc": [ - 1077, 1078 ] }, { - "teal": 1047, + "teal": 1036, "source": 241, "pc": [ 1079, @@ -4375,31 +4375,43 @@ ] }, { - "teal": 1048, + "teal": 1037, + "source": 241, + "pc": [ + 1081 + ] + }, + { + "teal": 1038, "source": 241, "pc": [ - 1081, 1082 ] }, { - "teal": 1052, - "source": 242, + "teal": 1039, + "source": 241, "pc": [ 1083, 1084 ] }, { - "teal": 1053, - "source": 242, + "teal": 1049, + "source": 243, + "pc": [ + 1085 + ] + }, + { + "teal": 1050, + "source": 243, "pc": [ - 1085, 1086 ] }, { - "teal": 1057, + "teal": 1051, "source": 243, "pc": [ 1087, @@ -4407,16 +4419,16 @@ ] }, { - "teal": 1058, - "source": 243, + "teal": 1055, + "source": 244, "pc": [ 1089, 1090 ] }, { - "teal": 1059, - "source": 243, + "teal": 1056, + "source": 244, "pc": [ 1091, 1092 @@ -4424,129 +4436,129 @@ }, { "teal": 1060, - "source": 243, + "source": 245, "pc": [ - 1093 + 1093, + 1094 ] }, { "teal": 1061, - "source": 243, + "source": 245, "pc": [ - 1094, - 1095 + 1095, + 1096 ] }, { "teal": 1065, - "source": 244, + "source": 246, "pc": [ - 1096, - 1097 + 1097, + 1098 ] }, { "teal": 1066, - "source": 244, + "source": 246, "pc": [ - 1098, - 1099 + 1099, + 1100 ] }, { - "teal": 1070, - "source": 245, + "teal": 1067, + "source": 246, "pc": [ - 1100, - 1101 + 1101, + 1102 ] }, { - "teal": 1071, - "source": 245, + "teal": 1068, + "source": 246, "pc": [ - 1102, 1103 ] }, { - "teal": 1074, - "source": 240, + "teal": 1069, + "source": 246, "pc": [ - 1104 + 1104, + 1105 ] }, { - "teal": 1075, - "source": 240, + "teal": 1073, + "source": 247, "pc": [ - 1105, - 1106 + 1106, + 1107 ] }, { - "teal": 1078, - "source": 240, + "teal": 1074, + "source": 247, "pc": [ - 1107 + 1108, + 1109 ] }, { - "teal": 1086, + "teal": 1078, "source": 248, "pc": [ - 1108 + 1110, + 1111 ] }, { - "teal": 1087, + "teal": 1079, "source": 248, "pc": [ - 1109 + 1112, + 1113 ] }, { - "teal": 1088, - "source": 248, + "teal": 1082, + "source": 243, "pc": [ - 1110, - 1111 + 1114 ] }, { - "teal": 1092, - "source": 249, + "teal": 1083, + "source": 243, "pc": [ - 1112, - 1113 + 1115, + 1116 ] }, { - "teal": 1093, - "source": 249, + "teal": 1086, + "source": 243, "pc": [ - 1114, - 1115 + 1117 ] }, { - "teal": 1097, - "source": 250, + "teal": 1094, + "source": 251, "pc": [ - 1116, - 1117 + 1118 ] }, { - "teal": 1098, - "source": 250, + "teal": 1095, + "source": 251, "pc": [ - 1118, 1119 ] }, { - "teal": 1102, + "teal": 1096, "source": 251, "pc": [ 1120, @@ -4554,196 +4566,184 @@ ] }, { - "teal": 1103, - "source": 251, + "teal": 1100, + "source": 252, "pc": [ 1122, 1123 ] }, { - "teal": 1104, - "source": 251, + "teal": 1101, + "source": 252, "pc": [ - 1124 + 1124, + 1125 ] }, { "teal": 1105, - "source": 251, + "source": 253, "pc": [ - 1125, - 1126 + 1126, + 1127 ] }, { "teal": 1106, - "source": 251, - "pc": [ - 1127, - 1128 - ] - }, - { - "teal": 1107, - "source": 251, + "source": 253, "pc": [ + 1128, 1129 ] }, { - "teal": 1108, - "source": 251, + "teal": 1110, + "source": 254, "pc": [ - 1130 + 1130, + 1131 ] }, { - "teal": 1109, - "source": 251, + "teal": 1111, + "source": 254, "pc": [ - 1131, - 1132 + 1132, + 1133 ] }, { "teal": 1112, - "source": 248, + "source": 254, "pc": [ - 1133 + 1134 ] }, { "teal": 1113, - "source": 248, + "source": 254, "pc": [ - 1134, - 1135 + 1135, + 1136 ] }, { - "teal": 1116, - "source": 248, + "teal": 1114, + "source": 254, "pc": [ - 1136 + 1137, + 1138 ] }, { - "teal": 1117, - "source": 237, + "teal": 1115, + "source": 254, "pc": [ - 1137 + 1139 ] }, { - "teal": 1122, - "source": 261, + "teal": 1116, + "source": 254, "pc": [ - 1138, - 1139, 1140 ] }, { - "teal": 1123, - "source": 261, + "teal": 1117, + "source": 254, "pc": [ - 1141 + 1141, + 1142 ] }, { - "teal": 1126, - "source": 261, + "teal": 1120, + "source": 251, "pc": [ - 1142, - 1143, - 1144 + 1143 ] }, { - "teal": 1127, - "source": 261, + "teal": 1121, + "source": 251, "pc": [ + 1144, 1145 ] }, { - "teal": 1128, - "source": 261, + "teal": 1124, + "source": 251, "pc": [ 1146 ] }, { - "teal": 1137, - "source": 261, + "teal": 1125, + "source": 240, "pc": [ - 1147, - 1148, - 1149 + 1147 ] }, { - "teal": 1140, - "source": 261, + "teal": 1130, + "source": 264, "pc": [ + 1148, + 1149, 1150 ] }, { - "teal": 1144, - "source": 262, - "pc": [ - 1151, - 1152 - ] - }, - { - "teal": 1145, - "source": 262, + "teal": 1131, + "source": 264, "pc": [ - 1153 + 1151 ] }, { - "teal": 1146, - "source": 262, + "teal": 1134, + "source": 264, "pc": [ + 1152, + 1153, 1154 ] }, { - "teal": 1147, - "source": 262, + "teal": 1135, + "source": 264, "pc": [ - 1155, - 1156 + 1155 ] }, { - "teal": 1157, + "teal": 1136, "source": 264, "pc": [ - 1157 + 1156 ] }, { - "teal": 1158, + "teal": 1145, "source": 264, "pc": [ - 1158 + 1157, + 1158, + 1159 ] }, { - "teal": 1159, + "teal": 1148, "source": 264, "pc": [ - 1159, 1160 ] }, { - "teal": 1163, + "teal": 1152, "source": 265, "pc": [ 1161, @@ -4751,208 +4751,220 @@ ] }, { - "teal": 1164, + "teal": 1153, + "source": 265, + "pc": [ + 1163 + ] + }, + { + "teal": 1154, "source": 265, "pc": [ - 1163, 1164 ] }, { - "teal": 1168, - "source": 266, + "teal": 1155, + "source": 265, "pc": [ 1165, 1166 ] }, { - "teal": 1169, - "source": 266, + "teal": 1165, + "source": 267, + "pc": [ + 1167 + ] + }, + { + "teal": 1166, + "source": 267, "pc": [ - 1167, 1168 ] }, { - "teal": 1170, - "source": 266, + "teal": 1167, + "source": 267, "pc": [ - 1169 + 1169, + 1170 ] }, { "teal": 1171, - "source": 266, + "source": 268, "pc": [ - 1170, - 1171 + 1171, + 1172 ] }, { - "teal": 1175, - "source": 267, + "teal": 1172, + "source": 268, "pc": [ - 1172, - 1173 + 1173, + 1174 ] }, { "teal": 1176, - "source": 267, + "source": 269, "pc": [ - 1174, - 1175 + 1175, + 1176 ] }, { "teal": 1177, - "source": 267, + "source": 269, "pc": [ - 1176, - 1177 + 1177, + 1178 ] }, { "teal": 1178, - "source": 267, + "source": 269, "pc": [ - 1178 + 1179 ] }, { "teal": 1179, - "source": 267, + "source": 269, "pc": [ - 1179, - 1180 + 1180, + 1181 ] }, { "teal": 1183, - "source": 268, + "source": 270, "pc": [ - 1181, - 1182 + 1182, + 1183 ] }, { "teal": 1184, - "source": 268, + "source": 270, "pc": [ - 1183, - 1184 + 1184, + 1185 ] }, { - "teal": 1188, - "source": 269, + "teal": 1185, + "source": 270, "pc": [ - 1185, - 1186 + 1186, + 1187 ] }, { - "teal": 1189, - "source": 269, + "teal": 1186, + "source": 270, "pc": [ - 1187, 1188 ] }, { - "teal": 1190, - "source": 269, + "teal": 1187, + "source": 270, "pc": [ - 1189 + 1189, + 1190 ] }, { "teal": 1191, - "source": 269, - "pc": [ - 1190, - 1191 - ] - }, - { - "teal": 1194, - "source": 264, + "source": 271, "pc": [ + 1191, 1192 ] }, { - "teal": 1195, - "source": 264, + "teal": 1192, + "source": 271, "pc": [ 1193, 1194 ] }, { - "teal": 1198, - "source": 264, - "pc": [ - 1195 - ] - }, - { - "teal": 1206, + "teal": 1196, "source": 272, "pc": [ + 1195, 1196 ] }, { - "teal": 1207, + "teal": 1197, "source": 272, "pc": [ - 1197 + 1197, + 1198 ] }, { - "teal": 1208, + "teal": 1198, "source": 272, "pc": [ - 1198, 1199 ] }, { - "teal": 1212, - "source": 273, + "teal": 1199, + "source": 272, "pc": [ 1200, 1201 ] }, { - "teal": 1213, - "source": 273, + "teal": 1202, + "source": 267, + "pc": [ + 1202 + ] + }, + { + "teal": 1203, + "source": 267, "pc": [ - 1202, - 1203 + 1203, + 1204 ] }, { - "teal": 1217, - "source": 274, + "teal": 1206, + "source": 267, "pc": [ - 1204, 1205 ] }, { - "teal": 1218, - "source": 274, + "teal": 1214, + "source": 275, + "pc": [ + 1206 + ] + }, + { + "teal": 1215, + "source": 275, "pc": [ - 1206, 1207 ] }, { - "teal": 1222, + "teal": 1216, "source": 275, "pc": [ 1208, @@ -4960,467 +4972,467 @@ ] }, { - "teal": 1223, - "source": 275, + "teal": 1220, + "source": 276, "pc": [ 1210, 1211 ] }, { - "teal": 1224, - "source": 275, + "teal": 1221, + "source": 276, "pc": [ - 1212 + 1212, + 1213 ] }, { "teal": 1225, - "source": 275, + "source": 277, "pc": [ - 1213, - 1214 + 1214, + 1215 ] }, { "teal": 1226, - "source": 275, - "pc": [ - 1215, - 1216 - ] - }, - { - "teal": 1227, - "source": 275, + "source": 277, "pc": [ + 1216, 1217 ] }, { - "teal": 1228, - "source": 275, + "teal": 1230, + "source": 278, "pc": [ - 1218 + 1218, + 1219 ] }, { - "teal": 1229, - "source": 275, + "teal": 1231, + "source": 278, "pc": [ - 1219, - 1220 + 1220, + 1221 ] }, { "teal": 1232, - "source": 272, + "source": 278, "pc": [ - 1221 + 1222 ] }, { "teal": 1233, - "source": 272, + "source": 278, "pc": [ - 1222, - 1223 + 1223, + 1224 ] }, { - "teal": 1236, - "source": 272, + "teal": 1234, + "source": 278, "pc": [ - 1224 + 1225, + 1226 ] }, { - "teal": 1237, - "source": 261, + "teal": 1235, + "source": 278, "pc": [ - 1225 + 1227 ] }, { - "teal": 1242, - "source": 286, + "teal": 1236, + "source": 278, "pc": [ - 1226 + 1228 ] }, { - "teal": 1245, - "source": 286, + "teal": 1237, + "source": 278, "pc": [ - 1227, - 1228, - 1229 + 1229, + 1230 ] }, { - "teal": 1246, - "source": 286, + "teal": 1240, + "source": 275, "pc": [ - 1230 + 1231 ] }, { - "teal": 1247, - "source": 286, + "teal": 1241, + "source": 275, "pc": [ - 1231 + 1232, + 1233 ] }, { - "teal": 1248, - "source": 286, + "teal": 1244, + "source": 275, "pc": [ - 1232 + 1234 ] }, { - "teal": 1249, - "source": 286, + "teal": 1245, + "source": 264, "pc": [ - 1233 + 1235 ] }, { "teal": 1250, - "source": 286, + "source": 289, "pc": [ - 1234 + 1236 ] }, { "teal": 1253, - "source": 286, + "source": 289, "pc": [ - 1235, - 1236, - 1237 + 1237, + 1238, + 1239 ] }, { "teal": 1254, - "source": 286, + "source": 289, "pc": [ - 1238 + 1240 ] }, { "teal": 1255, - "source": 286, + "source": 289, "pc": [ - 1239 + 1241 ] }, { "teal": 1256, - "source": 286, + "source": 289, "pc": [ - 1240 + 1242 ] }, { "teal": 1257, - "source": 286, + "source": 289, "pc": [ - 1241 + 1243 ] }, { - "teal": 1267, - "source": 286, + "teal": 1258, + "source": 289, "pc": [ - 1242, - 1243, 1244 ] }, { - "teal": 1271, - "source": 287, + "teal": 1261, + "source": 289, "pc": [ 1245, - 1246 + 1246, + 1247 ] }, { - "teal": 1272, - "source": 287, + "teal": 1262, + "source": 289, "pc": [ - 1247 + 1248 ] }, { - "teal": 1273, - "source": 287, + "teal": 1263, + "source": 289, "pc": [ - 1248 + 1249 ] }, { - "teal": 1274, - "source": 287, + "teal": 1264, + "source": 289, "pc": [ - 1249 + 1250 ] }, { - "teal": 1275, - "source": 287, + "teal": 1265, + "source": 289, "pc": [ - 1250, - 1251, - 1252 + 1251 ] }, { - "teal": 1276, - "source": 287, + "teal": 1275, + "source": 289, "pc": [ + 1252, 1253, 1254 ] }, { - "teal": 1277, - "source": 287, + "teal": 1279, + "source": 290, "pc": [ - 1255 + 1255, + 1256 ] }, { - "teal": 1278, - "source": 287, + "teal": 1280, + "source": 290, "pc": [ - 1256 + 1257 ] }, { - "teal": 1279, - "source": 287, + "teal": 1281, + "source": 290, "pc": [ - 1257, - 1258, - 1259 + 1258 ] }, { "teal": 1282, - "source": 287, + "source": 290, "pc": [ - 1260, - 1261 + 1259 ] }, { - "teal": 1285, - "source": 286, + "teal": 1283, + "source": 290, "pc": [ + 1260, + 1261, 1262 ] }, { - "teal": 1290, - "source": 291, + "teal": 1284, + "source": 290, "pc": [ 1263, - 1264, - 1265 + 1264 ] }, { - "teal": 1291, - "source": 291, + "teal": 1285, + "source": 290, "pc": [ - 1266 + 1265 ] }, { - "teal": 1292, - "source": 291, + "teal": 1286, + "source": 290, "pc": [ - 1267 + 1266 ] }, { - "teal": 1298, - "source": 291, + "teal": 1287, + "source": 290, "pc": [ + 1267, 1268, - 1269, - 1270 + 1269 ] }, { - "teal": 1301, - "source": 291, + "teal": 1290, + "source": 290, "pc": [ + 1270, 1271 ] }, { - "teal": 1305, - "source": 292, + "teal": 1293, + "source": 289, "pc": [ - 1272, - 1273 + 1272 ] }, { - "teal": 1306, - "source": 292, + "teal": 1298, + "source": 294, "pc": [ - 1274 + 1273, + 1274, + 1275 ] }, { - "teal": 1307, - "source": 292, + "teal": 1299, + "source": 294, "pc": [ - 1275 + 1276 ] }, { - "teal": 1308, - "source": 292, + "teal": 1300, + "source": 294, "pc": [ - 1276, 1277 ] }, { - "teal": 1312, + "teal": 1306, "source": 294, "pc": [ 1278, - 1279 + 1279, + 1280 ] }, { - "teal": 1313, + "teal": 1309, "source": 294, "pc": [ - 1280, 1281 ] }, { - "teal": 1314, - "source": 294, + "teal": 1313, + "source": 295, "pc": [ - 1282 + 1282, + 1283 ] }, { - "teal": 1315, - "source": 294, + "teal": 1314, + "source": 295, "pc": [ - 1283, 1284 ] }, { - "teal": 1316, - "source": 294, + "teal": 1315, + "source": 295, "pc": [ - 1285, - 1286 + 1285 ] }, { - "teal": 1317, - "source": 294, + "teal": 1316, + "source": 295, "pc": [ + 1286, 1287 ] }, { - "teal": 1318, - "source": 294, + "teal": 1320, + "source": 297, "pc": [ - 1288 + 1288, + 1289 ] }, { - "teal": 1319, - "source": 294, + "teal": 1321, + "source": 297, "pc": [ - 1289 + 1290, + 1291 ] }, { - "teal": 1320, - "source": 294, + "teal": 1322, + "source": 297, "pc": [ - 1290 + 1292 ] }, { - "teal": 1321, - "source": 294, + "teal": 1323, + "source": 297, "pc": [ - 1291 + 1293, + 1294 ] }, { - "teal": 1329, - "source": 296, + "teal": 1324, + "source": 297, "pc": [ - 1292 + 1295, + 1296 ] }, { - "teal": 1330, - "source": 296, + "teal": 1325, + "source": 297, "pc": [ - 1293 + 1297 ] }, { - "teal": 1331, - "source": 296, + "teal": 1326, + "source": 297, "pc": [ - 1294, - 1295 + 1298 ] }, { - "teal": 1335, + "teal": 1327, "source": 297, "pc": [ - 1296, - 1297 + 1299 ] }, { - "teal": 1336, + "teal": 1328, "source": 297, "pc": [ - 1298, - 1299 + 1300 ] }, { - "teal": 1340, - "source": 298, + "teal": 1329, + "source": 297, "pc": [ - 1300, 1301 ] }, { - "teal": 1341, - "source": 298, + "teal": 1337, + "source": 299, + "pc": [ + 1302 + ] + }, + { + "teal": 1338, + "source": 299, "pc": [ - 1302, 1303 ] }, { - "teal": 1345, + "teal": 1339, "source": 299, "pc": [ 1304, @@ -5428,244 +5440,274 @@ ] }, { - "teal": 1346, - "source": 299, + "teal": 1343, + "source": 300, "pc": [ 1306, 1307 ] }, { - "teal": 1347, - "source": 299, + "teal": 1344, + "source": 300, "pc": [ - 1308 + 1308, + 1309 ] }, { "teal": 1348, - "source": 299, + "source": 301, "pc": [ - 1309, - 1310 + 1310, + 1311 ] }, { "teal": 1349, - "source": 299, + "source": 301, "pc": [ - 1311, - 1312 + 1312, + 1313 ] }, { - "teal": 1350, - "source": 299, + "teal": 1353, + "source": 302, "pc": [ - 1313 + 1314, + 1315 ] }, { - "teal": 1351, - "source": 299, + "teal": 1354, + "source": 302, "pc": [ - 1314 + 1316, + 1317 ] }, { - "teal": 1352, - "source": 299, + "teal": 1355, + "source": 302, "pc": [ - 1315, - 1316 + 1318 ] }, { - "teal": 1355, - "source": 296, + "teal": 1356, + "source": 302, "pc": [ - 1317 + 1319, + 1320 ] }, { - "teal": 1356, - "source": 296, + "teal": 1357, + "source": 302, + "pc": [ + 1321, + 1322 + ] + }, + { + "teal": 1358, + "source": 302, "pc": [ - 1318, - 1319 + 1323 ] }, { "teal": 1359, - "source": 296, + "source": 302, "pc": [ - 1320 + 1324 ] }, { "teal": 1360, - "source": 291, + "source": 302, "pc": [ - 1321 + 1325, + 1326 ] }, { "teal": 1363, - "source": 33, + "source": 299, "pc": [ - 1322, - 1323, - 1324, - 1325, - 1326, 1327 ] }, { "teal": 1364, - "source": 33, + "source": 299, "pc": [ 1328, - 1329, - 1330 + 1329 ] }, { - "teal": 1365, - "source": 33, + "teal": 1367, + "source": 299, "pc": [ - 1331, - 1332, - 1333, - 1334 + 1330 ] }, { - "teal": 1366, - "source": 33, + "teal": 1368, + "source": 294, "pc": [ - 1335 + 1331 ] }, { - "teal": 1369, - "source": 33, + "teal": 1371, + "source": 35, "pc": [ + 1332, + 1333, + 1334, + 1335, 1336, - 1337, + 1337 + ] + }, + { + "teal": 1372, + "source": 35, + "pc": [ 1338, 1339, - 1340, - 1341 + 1340 ] }, { - "teal": 1370, - "source": 33, + "teal": 1373, + "source": 35, "pc": [ + 1341, 1342, 1343, - 1344, - 1345, - 1346, - 1347 + 1344 ] }, { - "teal": 1371, - "source": 33, + "teal": 1374, + "source": 35, + "pc": [ + 1345 + ] + }, + { + "teal": 1377, + "source": 35, "pc": [ + 1346, + 1347, 1348, 1349, 1350, - 1351, - 1352, - 1353 + 1351 ] }, { - "teal": 1372, - "source": 33, + "teal": 1378, + "source": 35, "pc": [ + 1352, + 1353, 1354, 1355, 1356, - 1357, - 1358, - 1359 + 1357 ] }, { - "teal": 1373, - "source": 33, + "teal": 1379, + "source": 35, "pc": [ + 1358, + 1359, 1360, 1361, 1362, - 1363, - 1364, - 1365 + 1363 ] }, { - "teal": 1374, - "source": 33, + "teal": 1380, + "source": 35, "pc": [ + 1364, + 1365, 1366, 1367, 1368, - 1369, - 1370, - 1371 + 1369 ] }, { - "teal": 1375, - "source": 33, + "teal": 1381, + "source": 35, "pc": [ + 1370, + 1371, 1372, 1373, 1374, - 1375, - 1376, - 1377 + 1375 ] }, { - "teal": 1376, - "source": 33, + "teal": 1382, + "source": 35, "pc": [ + 1376, + 1377, 1378, 1379, 1380, - 1381, - 1382, - 1383 + 1381 ] }, { - "teal": 1377, - "source": 33, + "teal": 1383, + "source": 35, "pc": [ + 1382, + 1383, 1384, 1385, - 1386 + 1386, + 1387 ] }, { - "teal": 1378, - "source": 33, + "teal": 1384, + "source": 35, "pc": [ - 1387, 1388, 1389, 1390, 1391, 1392, - 1393, + 1393 + ] + }, + { + "teal": 1385, + "source": 35, + "pc": [ 1394, 1395, - 1396, + 1396 + ] + }, + { + "teal": 1386, + "source": 35, + "pc": [ 1397, 1398, 1399, @@ -5673,14 +5715,24 @@ 1401, 1402, 1403, - 1404 + 1404, + 1405, + 1406, + 1407, + 1408, + 1409, + 1410, + 1411, + 1412, + 1413, + 1414 ] }, { - "teal": 1379, - "source": 33, + "teal": 1387, + "source": 35, "pc": [ - 1405 + 1415 ] } ] \ 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 101c16133..60f309ab5 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 @@ -232,7 +232,7 @@ arc59_getSendAssetInfo: byte 0x 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,7 +314,7 @@ arc59_getSendAssetInfo: bz *if2_end // *if2_consequent - // contracts/arc59.algo.ts:101 + // contracts/arc59.algo.ts:104 // info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -329,14 +337,14 @@ arc59_getSendAssetInfo: *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 +361,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 +380,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 +390,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 +407,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 +429,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 +455,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 +469,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 +480,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 +498,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 +513,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 +530,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 @@ -543,7 +551,7 @@ arc59_getSendAssetInfo: *if5_end: // *if7_condition - // contracts/arc59.algo.ts:144 + // contracts/arc59.algo.ts:147 // inbox.balance > inbox.minBalance && info.receiverAlgoNeededForClaim !== 0 frame_dig 6 // inbox: address acct_params_get AcctBalance @@ -567,7 +575,7 @@ arc59_getSendAssetInfo: bz *if7_end // *if7_consequent - // contracts/arc59.algo.ts:149 + // contracts/arc59.algo.ts:152 // algoConsumedByClaim = globals.assetOptInMinBalance + (info.itxns + 4) * globals.minTxnFee global AssetOptInMinBalance frame_dig 2 // info: SendAssetInfo @@ -582,7 +590,7 @@ arc59_getSendAssetInfo: + frame_bury 7 // algoConsumedByClaim: uint64 - // contracts/arc59.algo.ts:150 + // contracts/arc59.algo.ts:153 // inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim frame_dig 6 // inbox: address acct_params_get AcctBalance @@ -596,7 +604,7 @@ arc59_getSendAssetInfo: frame_bury 8 // inboxAlgoAvailable: uint64 // *if8_condition - // contracts/arc59.algo.ts:151 + // contracts/arc59.algo.ts:154 // inboxAlgoAvailable < info.receiverAlgoNeededForClaim frame_dig 8 // inboxAlgoAvailable: uint64 frame_dig 2 // info: SendAssetInfo @@ -608,7 +616,7 @@ arc59_getSendAssetInfo: bz *if8_end // *if8_consequent - // contracts/arc59.algo.ts:152 + // contracts/arc59.algo.ts:155 // info.receiverAlgoNeededForClaim -= inboxAlgoAvailable frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -628,7 +636,7 @@ arc59_getSendAssetInfo: *if8_end: *if7_end: - // contracts/arc59.algo.ts:156 + // contracts/arc59.algo.ts:159 // return info; frame_dig 2 // info: SendAssetInfo @@ -690,7 +698,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:169 + // contracts/arc59.algo.ts:172 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -702,7 +710,7 @@ arc59_sendAsset: assert // *if9_condition - // contracts/arc59.algo.ts:174 + // contracts/arc59.algo.ts:177 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -713,7 +721,7 @@ arc59_sendAsset: bz *if9_end // *if9_consequent - // contracts/arc59.algo.ts:175 + // contracts/arc59.algo.ts:178 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -723,18 +731,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:176 + // contracts/arc59.algo.ts:179 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:177 + // contracts/arc59.algo.ts:180 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:178 + // contracts/arc59.algo.ts:181 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -748,7 +756,7 @@ arc59_sendAsset: itxn_submit // *if10_condition - // contracts/arc59.algo.ts:181 + // contracts/arc59.algo.ts:184 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -756,7 +764,7 @@ arc59_sendAsset: bz *if10_end // *if10_consequent - // contracts/arc59.algo.ts:182 + // contracts/arc59.algo.ts:185 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -765,12 +773,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:183 + // contracts/arc59.algo.ts:186 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:184 + // contracts/arc59.algo.ts:187 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -783,13 +791,13 @@ arc59_sendAsset: itxn_submit *if10_end: - // contracts/arc59.algo.ts:188 + // contracts/arc59.algo.ts:191 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return *if9_end: - // contracts/arc59.algo.ts:191 + // contracts/arc59.algo.ts:194 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -797,14 +805,14 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:192 + // contracts/arc59.algo.ts:195 // inbox = this.arc59_getOrCreateInbox(receiver) frame_dig -2 // receiver: Address callsub arc59_getOrCreateInbox frame_bury 1 // inbox: address // *if11_condition - // contracts/arc59.algo.ts:194 + // contracts/arc59.algo.ts:197 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -812,7 +820,7 @@ arc59_sendAsset: bz *if11_end // *if11_consequent - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:198 // sendPayment({ // receiver: inbox, // amount: additionalReceiverFunds, @@ -821,12 +829,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:196 + // contracts/arc59.algo.ts:199 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:197 + // contracts/arc59.algo.ts:200 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -840,7 +848,7 @@ arc59_sendAsset: *if11_end: // *if12_condition - // contracts/arc59.algo.ts:201 + // contracts/arc59.algo.ts:204 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -852,20 +860,20 @@ arc59_sendAsset: bz *if12_end // *if12_consequent - // contracts/arc59.algo.ts:202 + // contracts/arc59.algo.ts:205 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 // *if13_condition - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:206 // !inboxExisted frame_dig 0 // inboxExisted: bool ! bz *if13_end // *if13_consequent - // contracts/arc59.algo.ts:203 + // contracts/arc59.algo.ts:206 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance @@ -874,7 +882,7 @@ arc59_sendAsset: *if13_end: // *if14_condition - // contracts/arc59.algo.ts:206 + // contracts/arc59.algo.ts:209 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -888,7 +896,7 @@ arc59_sendAsset: bz *if14_end // *if14_consequent - // contracts/arc59.algo.ts:207 + // contracts/arc59.algo.ts:210 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -897,12 +905,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:208 + // contracts/arc59.algo.ts:211 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:209 + // contracts/arc59.algo.ts:212 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -915,7 +923,7 @@ arc59_sendAsset: itxn_submit *if14_end: - // contracts/arc59.algo.ts:214 + // contracts/arc59.algo.ts:217 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -926,22 +934,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:215 + // contracts/arc59.algo.ts:218 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:216 + // contracts/arc59.algo.ts:219 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:217 + // contracts/arc59.algo.ts:220 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:218 + // contracts/arc59.algo.ts:221 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -955,7 +963,7 @@ arc59_sendAsset: itxn_submit *if12_end: - // contracts/arc59.algo.ts:223 + // contracts/arc59.algo.ts:226 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -965,18 +973,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:224 + // contracts/arc59.algo.ts:227 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:225 + // contracts/arc59.algo.ts:228 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:226 + // contracts/arc59.algo.ts:229 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -989,7 +997,7 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:232 // return inbox; frame_dig 1 // inbox: address @@ -1023,14 +1031,14 @@ arc59_claim: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:238 + // contracts/arc59.algo.ts:241 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:240 + // contracts/arc59.algo.ts:243 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -1042,17 +1050,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:241 + // contracts/arc59.algo.ts:244 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:242 + // contracts/arc59.algo.ts:245 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:243 + // contracts/arc59.algo.ts:246 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1060,12 +1068,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:244 + // contracts/arc59.algo.ts:247 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:245 + // contracts/arc59.algo.ts:248 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -1077,7 +1085,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:248 + // contracts/arc59.algo.ts:251 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1087,17 +1095,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:249 + // contracts/arc59.algo.ts:252 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:250 + // contracts/arc59.algo.ts:253 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:251 + // contracts/arc59.algo.ts:254 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1139,14 +1147,14 @@ arc59_reject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:262 + // contracts/arc59.algo.ts:265 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:264 + // contracts/arc59.algo.ts:267 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1158,19 +1166,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:265 + // contracts/arc59.algo.ts:268 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:266 + // contracts/arc59.algo.ts:269 // assetReceiver: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator pop itxn_field AssetReceiver - // contracts/arc59.algo.ts:267 + // contracts/arc59.algo.ts:270 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1178,12 +1186,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:268 + // contracts/arc59.algo.ts:271 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:269 + // contracts/arc59.algo.ts:272 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1197,7 +1205,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:272 + // contracts/arc59.algo.ts:275 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1207,17 +1215,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:273 + // contracts/arc59.algo.ts:276 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:274 + // contracts/arc59.algo.ts:277 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:275 + // contracts/arc59.algo.ts:278 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1266,7 +1274,7 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:287 + // contracts/arc59.algo.ts:290 // return this.inboxes(receiver).exists ? this.inboxes(receiver).value : globals.zeroAddress; frame_dig -1 // receiver: Address box_len @@ -1300,14 +1308,14 @@ arc59_claimAlgo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:292 + // contracts/arc59.algo.ts:295 // inbox = this.inboxes(this.txn.sender).value txn Sender box_get assert frame_bury 0 // inbox: address - // contracts/arc59.algo.ts:294 + // contracts/arc59.algo.ts:297 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1320,7 +1328,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:296 + // contracts/arc59.algo.ts:299 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1330,17 +1338,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:297 + // contracts/arc59.algo.ts:300 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:298 + // contracts/arc59.algo.ts:301 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:299 + // contracts/arc59.algo.ts:302 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1389,7 +1397,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 626fbbbe5..150b43d95 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+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDQKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ5CgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUwCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTEKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NAoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzYKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTIKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQyCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjIKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY2CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg3CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTQKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTgKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA4CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEwCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTMKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjAKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMQoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIyCgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMwoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI2CgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMzCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM1CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNwoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDIKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDcKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUzCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTQKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU1CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1OQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzIKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTIKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI2CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMyCgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDcKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcwCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkwCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAwCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDIKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", "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 4e49ef8eb..46539222b 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json @@ -979,7 +979,7 @@ ] }, { - "teal": 261, + "teal": 262, "source": 8, "pc": [ 313, @@ -1003,7 +1003,7 @@ ] }, { - "teal": 262, + "teal": 263, "source": 8, "pc": [ 331, @@ -1012,14 +1012,14 @@ ] }, { - "teal": 263, + "teal": 264, "source": 8, "pc": [ 334 ] }, { - "teal": 264, + "teal": 265, "source": 8, "pc": [ 335, @@ -1027,21 +1027,21 @@ ] }, { - "teal": 265, + "teal": 266, "source": 8, "pc": [ 337 ] }, { - "teal": 266, + "teal": 267, "source": 8, "pc": [ 338 ] }, { - "teal": 267, + "teal": 268, "source": 8, "pc": [ 339, @@ -1049,21 +1049,21 @@ ] }, { - "teal": 268, + "teal": 269, "source": 8, "pc": [ 341 ] }, { - "teal": 269, + "teal": 270, "source": 8, "pc": [ 342 ] }, { - "teal": 270, + "teal": 271, "source": 8, "pc": [ 343, @@ -1079,14 +1079,14 @@ ] }, { - "teal": 271, + "teal": 272, "source": 8, "pc": [ 353 ] }, { - "teal": 272, + "teal": 273, "source": 8, "pc": [ 354, @@ -1094,7 +1094,7 @@ ] }, { - "teal": 277, + "teal": 274, "source": 8, "pc": [ 356, @@ -1102,102 +1102,108 @@ ] }, { - "teal": 278, + "teal": 275, + "source": 8, + "pc": [ + 358 + ] + }, + { + "teal": 276, "source": 8, "pc": [ - 358, 359, 360 ] }, { - "teal": 283, + "teal": 277, "source": 8, "pc": [ - 361, - 362 + 361 ] }, { - "teal": 284, + "teal": 278, "source": 8, "pc": [ - 363, - 364, - 365 + 362 ] }, { - "teal": 289, + "teal": 279, "source": 8, "pc": [ - 366, - 367 + 363 ] }, { - "teal": 290, + "teal": 280, "source": 8, "pc": [ - 368, - 369 + 364, + 365 ] }, { - "teal": 291, + "teal": 285, "source": 8, "pc": [ - 370 + 366, + 367 ] }, { - "teal": 292, + "teal": 286, "source": 8, "pc": [ - 371, - 372 + 368, + 369, + 370 ] }, { - "teal": 293, + "teal": 291, "source": 8, "pc": [ - 373 + 371, + 372 ] }, { - "teal": 294, + "teal": 292, "source": 8, "pc": [ + 373, 374, 375 ] }, { - "teal": 295, + "teal": 297, "source": 8, "pc": [ - 376 + 376, + 377 ] }, { - "teal": 296, + "teal": 298, "source": 8, "pc": [ - 377, - 378 + 378, + 379 ] }, { - "teal": 301, + "teal": 299, "source": 8, "pc": [ - 379, 380 ] }, { - "teal": 302, + "teal": 300, "source": 8, "pc": [ 381, @@ -1205,14 +1211,14 @@ ] }, { - "teal": 303, + "teal": 301, "source": 8, "pc": [ 383 ] }, { - "teal": 304, + "teal": 302, "source": 8, "pc": [ 384, @@ -1220,39 +1226,45 @@ ] }, { - "teal": 305, + "teal": 303, "source": 8, "pc": [ 386 ] }, { - "teal": 306, + "teal": 304, "source": 8, "pc": [ 387, - 388, - 389 + 388 ] }, { - "teal": 311, + "teal": 309, "source": 8, "pc": [ - 390, - 391 + 389, + 390 ] }, { - "teal": 312, + "teal": 310, + "source": 8, + "pc": [ + 391, + 392 + ] + }, + { + "teal": 311, "source": 8, "pc": [ - 392, 393 ] }, { - "teal": 313, + "teal": 312, "source": 8, "pc": [ 394, @@ -1260,23 +1272,23 @@ ] }, { - "teal": 314, + "teal": 313, "source": 8, "pc": [ - 396, - 397 + 396 ] }, { - "teal": 315, + "teal": 314, "source": 8, "pc": [ + 397, 398, 399 ] }, { - "teal": 316, + "teal": 319, "source": 8, "pc": [ 400, @@ -1284,7 +1296,7 @@ ] }, { - "teal": 317, + "teal": 320, "source": 8, "pc": [ 402, @@ -1292,23 +1304,23 @@ ] }, { - "teal": 318, + "teal": 321, "source": 8, "pc": [ 404, - 405, - 406 + 405 ] }, { - "teal": 319, + "teal": 322, "source": 8, "pc": [ + 406, 407 ] }, { - "teal": 320, + "teal": 323, "source": 8, "pc": [ 408, @@ -1316,7 +1328,7 @@ ] }, { - "teal": 321, + "teal": 324, "source": 8, "pc": [ 410, @@ -1324,7 +1336,7 @@ ] }, { - "teal": 322, + "teal": 325, "source": 8, "pc": [ 412, @@ -1332,82 +1344,82 @@ ] }, { - "teal": 323, + "teal": 326, "source": 8, "pc": [ - 414 + 414, + 415, + 416 ] }, { - "teal": 324, + "teal": 327, "source": 8, "pc": [ - 415 + 417 ] }, { - "teal": 325, + "teal": 328, "source": 8, "pc": [ - 416 + 418, + 419 ] }, { - "teal": 326, + "teal": 329, "source": 8, "pc": [ - 417 + 420, + 421 ] }, { - "teal": 327, + "teal": 330, "source": 8, "pc": [ - 418 + 422, + 423 ] }, { - "teal": 328, + "teal": 331, "source": 8, "pc": [ - 419, - 420 + 424 ] }, { - "teal": 334, + "teal": 332, "source": 8, "pc": [ - 421, - 422 + 425 ] }, { - "teal": 335, + "teal": 333, "source": 8, "pc": [ - 423 + 426 ] }, { - "teal": 336, + "teal": 334, "source": 8, "pc": [ - 424, - 425, - 426 + 427 ] }, { - "teal": 341, + "teal": 335, "source": 8, "pc": [ - 427, 428 ] }, { - "teal": 342, + "teal": 336, "source": 8, "pc": [ 429, @@ -1415,7 +1427,7 @@ ] }, { - "teal": 343, + "teal": 342, "source": 8, "pc": [ 431, @@ -1423,23 +1435,23 @@ ] }, { - "teal": 344, + "teal": 343, "source": 8, "pc": [ - 433, - 434 + 433 ] }, { - "teal": 345, + "teal": 344, "source": 8, "pc": [ + 434, 435, 436 ] }, { - "teal": 346, + "teal": 349, "source": 8, "pc": [ 437, @@ -1447,7 +1459,7 @@ ] }, { - "teal": 347, + "teal": 350, "source": 8, "pc": [ 439, @@ -1455,23 +1467,23 @@ ] }, { - "teal": 348, + "teal": 351, "source": 8, "pc": [ 441, - 442, - 443 + 442 ] }, { - "teal": 349, + "teal": 352, "source": 8, "pc": [ + 443, 444 ] }, { - "teal": 350, + "teal": 353, "source": 8, "pc": [ 445, @@ -1479,135 +1491,123 @@ ] }, { - "teal": 351, + "teal": 354, "source": 8, "pc": [ - 447 + 447, + 448 ] }, { - "teal": 352, + "teal": 355, "source": 8, "pc": [ - 448 + 449, + 450 ] }, { - "teal": 353, + "teal": 356, "source": 8, "pc": [ - 449 + 451, + 452, + 453 ] }, { - "teal": 354, + "teal": 357, "source": 8, "pc": [ - 450, - 451 + 454 ] }, { "teal": 358, "source": 8, "pc": [ - 452, - 453 + 455, + 456 ] }, { "teal": 359, "source": 8, "pc": [ - 454, - 455 + 457 ] }, { "teal": 360, "source": 8, "pc": [ - 456, - 457 + 458 ] }, { "teal": 361, "source": 8, "pc": [ - 458 + 459 ] }, { "teal": 362, "source": 8, "pc": [ - 459, - 460 + 460, + 461 ] }, { - "teal": 363, + "teal": 366, "source": 8, "pc": [ - 461, - 462 + 462, + 463 ] }, { - "teal": 364, + "teal": 367, "source": 8, "pc": [ - 463, - 464 + 464, + 465 ] }, { - "teal": 365, + "teal": 368, "source": 8, "pc": [ - 465, 466, 467 ] }, { - "teal": 366, + "teal": 369, "source": 8, "pc": [ 468 ] }, { - "teal": 367, - "source": 8, - "pc": [ - 469 - ] - }, - { - "teal": 368, + "teal": 370, "source": 8, "pc": [ + 469, 470 ] }, { - "teal": 369, - "source": 8, - "pc": [ - 471 - ] - }, - { - "teal": 370, + "teal": 371, "source": 8, "pc": [ + 471, 472 ] }, { - "teal": 371, + "teal": 372, "source": 8, "pc": [ 473, @@ -1615,213 +1615,219 @@ ] }, { - "teal": 377, + "teal": 373, "source": 8, "pc": [ 475, - 476 - ] - }, - { - "teal": 378, - "source": 8, - "pc": [ + 476, 477 ] }, { - "teal": 379, + "teal": 374, "source": 8, "pc": [ 478 ] }, { - "teal": 380, + "teal": 375, "source": 8, "pc": [ 479 ] }, { - "teal": 381, + "teal": 376, "source": 8, "pc": [ 480 ] }, { - "teal": 382, + "teal": 377, "source": 8, "pc": [ - 481, - 482, - 483 + 481 ] }, { - "teal": 387, + "teal": 378, "source": 8, "pc": [ - 484, - 485 + 482 ] }, { - "teal": 388, + "teal": 379, "source": 8, "pc": [ - 486, - 487 + 483, + 484 ] }, { - "teal": 389, + "teal": 385, "source": 8, "pc": [ - 488, - 489 + 485, + 486 ] }, { - "teal": 390, + "teal": 386, "source": 8, "pc": [ - 490 + 487 ] }, { - "teal": 391, + "teal": 387, "source": 8, "pc": [ - 491, - 492 + 488 ] }, { - "teal": 392, + "teal": 388, "source": 8, "pc": [ - 493, - 494 + 489 ] }, { - "teal": 393, + "teal": 389, "source": 8, "pc": [ - 495, - 496 + 490 ] }, { - "teal": 394, + "teal": 390, "source": 8, "pc": [ - 497, - 498, - 499 + 491, + 492, + 493 ] }, { "teal": 395, "source": 8, "pc": [ - 500 + 494, + 495 ] }, { "teal": 396, "source": 8, "pc": [ - 501 + 496, + 497 ] }, { "teal": 397, "source": 8, "pc": [ - 502 + 498, + 499 ] }, { "teal": 398, "source": 8, "pc": [ - 503 + 500 ] }, { "teal": 399, "source": 8, "pc": [ - 504 + 501, + 502 ] }, { "teal": 400, "source": 8, + "pc": [ + 503, + 504 + ] + }, + { + "teal": 401, + "source": 8, "pc": [ 505, 506 ] }, { - "teal": 404, + "teal": 402, "source": 8, "pc": [ 507, - 508 + 508, + 509 ] }, { - "teal": 405, + "teal": 403, "source": 8, "pc": [ - 509, 510 ] }, { - "teal": 406, + "teal": 404, "source": 8, "pc": [ 511 ] }, { - "teal": 407, + "teal": 405, + "source": 8, + "pc": [ + 512 + ] + }, + { + "teal": 406, "source": 8, "pc": [ - 512, 513 ] }, { - "teal": 411, + "teal": 407, "source": 8, "pc": [ - 514, - 515 + 514 ] }, { - "teal": 412, + "teal": 408, "source": 8, "pc": [ - 516, - 517 + 515, + 516 ] }, { - "teal": 413, + "teal": 412, "source": 8, "pc": [ + 517, 518 ] }, { - "teal": 417, + "teal": 413, "source": 8, "pc": [ 519, @@ -1829,22 +1835,22 @@ ] }, { - "teal": 418, + "teal": 414, "source": 8, "pc": [ - 521, - 522 + 521 ] }, { - "teal": 419, + "teal": 415, "source": 8, "pc": [ + 522, 523 ] }, { - "teal": 420, + "teal": 419, "source": 8, "pc": [ 524, @@ -1852,22 +1858,22 @@ ] }, { - "teal": 421, + "teal": 420, "source": 8, "pc": [ - 526 + 526, + 527 ] }, { - "teal": 422, + "teal": 421, "source": 8, "pc": [ - 527, 528 ] }, { - "teal": 426, + "teal": 425, "source": 8, "pc": [ 529, @@ -1875,22 +1881,22 @@ ] }, { - "teal": 427, + "teal": 426, "source": 8, "pc": [ - 531 + 531, + 532 ] }, { - "teal": 431, + "teal": 427, "source": 8, "pc": [ - 532, 533 ] }, { - "teal": 432, + "teal": 428, "source": 8, "pc": [ 534, @@ -1898,31 +1904,37 @@ ] }, { - "teal": 433, + "teal": 429, + "source": 8, + "pc": [ + 536 + ] + }, + { + "teal": 430, "source": 8, "pc": [ - 536, - 537 + 537, + 538 ] }, { "teal": 434, "source": 8, "pc": [ - 538, - 539 + 539, + 540 ] }, { "teal": 435, "source": 8, "pc": [ - 540, 541 ] }, { - "teal": 436, + "teal": 439, "source": 8, "pc": [ 542, @@ -1930,7 +1942,7 @@ ] }, { - "teal": 437, + "teal": 440, "source": 8, "pc": [ 544, @@ -1938,23 +1950,23 @@ ] }, { - "teal": 438, + "teal": 441, "source": 8, "pc": [ 546, - 547, - 548 + 547 ] }, { - "teal": 439, + "teal": 442, "source": 8, "pc": [ + 548, 549 ] }, { - "teal": 440, + "teal": 443, "source": 8, "pc": [ 550, @@ -1962,7 +1974,7 @@ ] }, { - "teal": 441, + "teal": 444, "source": 8, "pc": [ 552, @@ -1970,121 +1982,115 @@ ] }, { - "teal": 442, + "teal": 445, "source": 8, "pc": [ - 554 + 554, + 555 ] }, { - "teal": 443, + "teal": 446, "source": 8, "pc": [ - 555, - 556 + 556, + 557, + 558 ] }, { - "teal": 444, + "teal": 447, "source": 8, "pc": [ - 557 + 559 ] }, { - "teal": 445, + "teal": 448, "source": 8, "pc": [ - 558 + 560, + 561 ] }, { - "teal": 446, + "teal": 449, "source": 8, "pc": [ - 559 + 562, + 563 ] }, { - "teal": 447, + "teal": 450, "source": 8, "pc": [ - 560 + 564 ] }, { - "teal": 448, + "teal": 451, "source": 8, "pc": [ - 561, - 562 + 565, + 566 ] }, { "teal": 452, "source": 8, "pc": [ - 563, - 564 + 567 ] }, { "teal": 453, "source": 8, "pc": [ - 565, - 566, - 567 + 568 ] }, { - "teal": 458, + "teal": 454, "source": 8, "pc": [ - 568, 569 ] }, { - "teal": 459, + "teal": 455, "source": 8, "pc": [ 570 ] }, { - "teal": 460, - "source": 8, - "pc": [ - 571 - ] - }, - { - "teal": 461, + "teal": 456, "source": 8, "pc": [ - 572, - 573 + 571, + 572 ] }, { - "teal": 466, + "teal": 460, "source": 8, "pc": [ - 574, - 575 + 573, + 574 ] }, { - "teal": 467, + "teal": 461, "source": 8, "pc": [ + 575, 576, 577 ] }, { - "teal": 468, + "teal": 466, "source": 8, "pc": [ 578, @@ -2092,37 +2098,37 @@ ] }, { - "teal": 469, + "teal": 467, "source": 8, "pc": [ 580 ] }, { - "teal": 470, + "teal": 468, "source": 8, "pc": [ 581 ] }, { - "teal": 471, + "teal": 469, "source": 8, "pc": [ - 582 + 582, + 583 ] }, { - "teal": 472, + "teal": 474, "source": 8, "pc": [ - 583, 584, 585 ] }, { - "teal": 477, + "teal": 475, "source": 8, "pc": [ 586, @@ -2130,7 +2136,7 @@ ] }, { - "teal": 478, + "teal": 476, "source": 8, "pc": [ 588, @@ -2138,90 +2144,84 @@ ] }, { - "teal": 479, + "teal": 477, + "source": 8, + "pc": [ + 590 + ] + }, + { + "teal": 478, "source": 8, "pc": [ - 590, 591 ] }, { - "teal": 480, + "teal": 479, "source": 8, "pc": [ 592 ] }, { - "teal": 481, + "teal": 480, "source": 8, "pc": [ 593, - 594 + 594, + 595 ] }, { - "teal": 482, + "teal": 485, "source": 8, "pc": [ - 595, - 596 + 596, + 597 ] }, { - "teal": 483, + "teal": 486, "source": 8, "pc": [ - 597, - 598 + 598, + 599 ] }, { - "teal": 484, + "teal": 487, "source": 8, "pc": [ - 599, 600, 601 ] }, { - "teal": 485, + "teal": 488, "source": 8, "pc": [ 602 ] }, { - "teal": 486, - "source": 8, - "pc": [ - 603 - ] - }, - { - "teal": 487, + "teal": 489, "source": 8, "pc": [ + 603, 604 ] }, { - "teal": 488, - "source": 8, - "pc": [ - 605 - ] - }, - { - "teal": 489, + "teal": 490, "source": 8, "pc": [ + 605, 606 ] }, { - "teal": 490, + "teal": 491, "source": 8, "pc": [ 607, @@ -2229,53 +2229,59 @@ ] }, { - "teal": 495, + "teal": 492, "source": 8, "pc": [ 609, - 610 + 610, + 611 ] }, { - "teal": 496, + "teal": 493, "source": 8, "pc": [ - 611, 612 ] }, { - "teal": 497, + "teal": 494, "source": 8, "pc": [ 613 ] }, { - "teal": 498, + "teal": 495, + "source": 8, + "pc": [ + 614 + ] + }, + { + "teal": 496, "source": 8, "pc": [ - 614, 615 ] }, { - "teal": 499, + "teal": 497, "source": 8, "pc": [ - 616, - 617 + 616 ] }, { - "teal": 500, + "teal": 498, "source": 8, "pc": [ + 617, 618 ] }, { - "teal": 501, + "teal": 503, "source": 8, "pc": [ 619, @@ -2283,45 +2289,45 @@ ] }, { - "teal": 502, + "teal": 504, "source": 8, "pc": [ - 621 + 621, + 622 ] }, { - "teal": 503, + "teal": 505, "source": 8, "pc": [ - 622 + 623 ] }, { - "teal": 504, + "teal": 506, "source": 8, "pc": [ - 623 + 624, + 625 ] }, { - "teal": 505, + "teal": 507, "source": 8, "pc": [ - 624, - 625, - 626 + 626, + 627 ] }, { - "teal": 510, + "teal": 508, "source": 8, "pc": [ - 627, 628 ] }, { - "teal": 511, + "teal": 509, "source": 8, "pc": [ 629, @@ -2329,125 +2335,131 @@ ] }, { - "teal": 512, + "teal": 510, + "source": 8, + "pc": [ + 631 + ] + }, + { + "teal": 511, "source": 8, "pc": [ - 631, 632 ] }, { - "teal": 513, + "teal": 512, "source": 8, "pc": [ 633 ] }, { - "teal": 514, + "teal": 513, "source": 8, "pc": [ 634, - 635 + 635, + 636 ] }, { - "teal": 515, + "teal": 518, "source": 8, "pc": [ - 636, - 637 + 637, + 638 ] }, { - "teal": 516, + "teal": 519, "source": 8, "pc": [ - 638, - 639 + 639, + 640 ] }, { - "teal": 517, + "teal": 520, "source": 8, "pc": [ - 640, 641, 642 ] }, { - "teal": 518, + "teal": 521, "source": 8, "pc": [ 643 ] }, { - "teal": 519, + "teal": 522, "source": 8, "pc": [ - 644 + 644, + 645 ] }, { - "teal": 520, + "teal": 523, "source": 8, "pc": [ - 645 + 646, + 647 ] }, { - "teal": 521, + "teal": 524, "source": 8, "pc": [ - 646 + 648, + 649 ] }, { - "teal": 522, + "teal": 525, "source": 8, "pc": [ - 647 + 650, + 651, + 652 ] }, { - "teal": 523, + "teal": 526, "source": 8, "pc": [ - 648, - 649 + 653 ] }, { "teal": 527, "source": 8, "pc": [ - 650, - 651 + 654 ] }, { "teal": 528, "source": 8, "pc": [ - 652, - 653 + 655 ] }, { "teal": 529, "source": 8, "pc": [ - 654, - 655 + 656 ] }, { "teal": 530, "source": 8, "pc": [ - 656, 657 ] }, @@ -2460,7 +2472,7 @@ ] }, { - "teal": 532, + "teal": 535, "source": 8, "pc": [ 660, @@ -2468,7 +2480,7 @@ ] }, { - "teal": 533, + "teal": 536, "source": 8, "pc": [ 662, @@ -2476,23 +2488,23 @@ ] }, { - "teal": 534, + "teal": 537, "source": 8, "pc": [ 664, - 665, - 666 + 665 ] }, { - "teal": 535, + "teal": 538, "source": 8, "pc": [ + 666, 667 ] }, { - "teal": 536, + "teal": 539, "source": 8, "pc": [ 668, @@ -2500,105 +2512,99 @@ ] }, { - "teal": 537, - "source": 8, - "pc": [ - 670 - ] - }, - { - "teal": 538, + "teal": 540, "source": 8, "pc": [ + 670, 671 ] }, { - "teal": 539, + "teal": 541, "source": 8, "pc": [ - 672 + 672, + 673 ] }, { - "teal": 540, + "teal": 542, "source": 8, "pc": [ - 673, - 674 + 674, + 675, + 676 ] }, { - "teal": 548, + "teal": 543, "source": 8, "pc": [ - 675, - 676 + 677 ] }, { - "teal": 549, + "teal": 544, "source": 8, "pc": [ - 677, - 678 + 678, + 679 ] }, { - "teal": 550, + "teal": 545, "source": 8, "pc": [ - 679 + 680 ] }, { - "teal": 551, + "teal": 546, "source": 8, "pc": [ - 680, 681 ] }, { - "teal": 552, + "teal": 547, "source": 8, "pc": [ - 682, - 683 + 682 ] }, { - "teal": 553, + "teal": 548, "source": 8, "pc": [ + 683, 684 ] }, { - "teal": 554, + "teal": 556, "source": 8, "pc": [ - 685 + 685, + 686 ] }, { - "teal": 555, + "teal": 557, "source": 8, "pc": [ - 686 + 687, + 688 ] }, { - "teal": 556, + "teal": 558, "source": 8, "pc": [ - 687, - 688, 689 ] }, { - "teal": 557, + "teal": 559, "source": 8, "pc": [ 690, @@ -2606,7 +2612,7 @@ ] }, { - "teal": 558, + "teal": 560, "source": 8, "pc": [ 692, @@ -2614,123 +2620,123 @@ ] }, { - "teal": 559, + "teal": 561, "source": 8, "pc": [ - 694, - 695 + 694 ] }, { - "teal": 560, + "teal": 562, "source": 8, "pc": [ - 696, - 697, - 698 + 695 ] }, { - "teal": 561, + "teal": 563, "source": 8, "pc": [ - 699 + 696 ] }, { - "teal": 562, + "teal": 564, "source": 8, "pc": [ - 700 + 697, + 698, + 699 ] }, { - "teal": 563, + "teal": 565, "source": 8, "pc": [ + 700, 701 ] }, { - "teal": 564, + "teal": 566, "source": 8, "pc": [ - 702 + 702, + 703 ] }, { "teal": 567, "source": 8, "pc": [ - 703, 704, 705 ] }, { - "teal": 572, + "teal": 568, "source": 8, "pc": [ 706, - 707 + 707, + 708 ] }, { - "teal": 573, + "teal": 569, "source": 8, "pc": [ - 708, 709 ] }, { - "teal": 574, + "teal": 570, "source": 8, "pc": [ - 710, - 711 + 710 ] }, { - "teal": 575, + "teal": 571, "source": 8, "pc": [ - 712, - 713 + 711 ] }, { - "teal": 576, + "teal": 572, "source": 8, "pc": [ - 714, - 715, - 716 + 712 ] }, { - "teal": 577, + "teal": 575, "source": 8, "pc": [ - 717 + 713, + 714, + 715 ] }, { - "teal": 578, + "teal": 580, "source": 8, "pc": [ - 718 + 716, + 717 ] }, { - "teal": 579, + "teal": 581, "source": 8, "pc": [ + 718, 719 ] }, { - "teal": 580, + "teal": 582, "source": 8, "pc": [ 720, @@ -2738,169 +2744,175 @@ ] }, { - "teal": 581, + "teal": 583, + "source": 8, + "pc": [ + 722, + 723 + ] + }, + { + "teal": 584, "source": 8, "pc": [ - 722 + 724, + 725, + 726 ] }, { - "teal": 582, + "teal": 585, "source": 8, "pc": [ - 723 + 727 ] }, { - "teal": 583, + "teal": 586, "source": 8, "pc": [ - 724, - 725 + 728 ] }, { "teal": 587, "source": 8, "pc": [ - 726, - 727 + 729 ] }, { "teal": 588, "source": 8, "pc": [ - 728, - 729 + 730, + 731 ] }, { "teal": 589, "source": 8, "pc": [ - 730 + 732 ] }, { "teal": 590, "source": 8, "pc": [ - 731, - 732 + 733 ] }, { "teal": 591, "source": 8, "pc": [ - 733, - 734 + 734, + 735 ] }, { - "teal": 592, + "teal": 595, "source": 8, "pc": [ - 735 + 736, + 737 ] }, { - "teal": 593, + "teal": 596, "source": 8, "pc": [ - 736 + 738, + 739 ] }, { - "teal": 594, + "teal": 597, "source": 8, "pc": [ - 737, - 738 + 740 ] }, { - "teal": 595, + "teal": 598, "source": 8, "pc": [ - 739 + 741, + 742 ] }, { - "teal": 596, + "teal": 599, "source": 8, "pc": [ - 740, - 741 + 743, + 744 ] }, { - "teal": 601, + "teal": 600, "source": 8, "pc": [ - 742, - 743 + 745 ] }, { - "teal": 602, + "teal": 601, "source": 8, "pc": [ - 744, - 745 + 746 ] }, { - "teal": 603, + "teal": 602, "source": 8, "pc": [ - 746, - 747 + 747, + 748 ] }, { - "teal": 604, + "teal": 603, "source": 8, "pc": [ - 748, 749 ] }, { - "teal": 605, + "teal": 604, "source": 8, "pc": [ 750, - 751, - 752 + 751 ] }, { - "teal": 606, + "teal": 609, "source": 8, "pc": [ + 752, 753 ] }, { - "teal": 607, + "teal": 610, "source": 8, "pc": [ - 754 + 754, + 755 ] }, { - "teal": 608, + "teal": 611, "source": 8, "pc": [ - 755, 756, 757 ] }, { - "teal": 613, + "teal": 612, "source": 8, "pc": [ 758, @@ -2908,39 +2920,39 @@ ] }, { - "teal": 614, + "teal": 613, "source": 8, "pc": [ 760, - 761 + 761, + 762 ] }, { - "teal": 615, + "teal": 614, "source": 8, "pc": [ - 762, 763 ] }, { - "teal": 616, + "teal": 615, "source": 8, "pc": [ - 764, - 765 + 764 ] }, { - "teal": 617, + "teal": 616, "source": 8, "pc": [ + 765, 766, 767 ] }, { - "teal": 618, + "teal": 621, "source": 8, "pc": [ 768, @@ -2948,7 +2960,7 @@ ] }, { - "teal": 619, + "teal": 622, "source": 8, "pc": [ 770, @@ -2956,23 +2968,23 @@ ] }, { - "teal": 620, + "teal": 623, "source": 8, "pc": [ 772, - 773, - 774 + 773 ] }, { - "teal": 621, + "teal": 624, "source": 8, "pc": [ + 774, 775 ] }, { - "teal": 622, + "teal": 625, "source": 8, "pc": [ 776, @@ -2980,113 +2992,107 @@ ] }, { - "teal": 623, + "teal": 626, "source": 8, "pc": [ - 778 + 778, + 779 ] }, { - "teal": 624, + "teal": 627, "source": 8, "pc": [ - 779 + 780, + 781 ] }, { - "teal": 625, + "teal": 628, "source": 8, "pc": [ - 780 + 782, + 783, + 784 ] }, { - "teal": 626, + "teal": 629, "source": 8, "pc": [ - 781, - 782 + 785 ] }, { - "teal": 633, + "teal": 630, "source": 8, "pc": [ - 783, - 784 + 786, + 787 ] }, { - "teal": 637, + "teal": 631, "source": 8, "pc": [ - 785, - 786 + 788 ] }, { - "teal": 640, + "teal": 632, "source": 8, "pc": [ - 787, - 788 + 789 ] }, { - "teal": 641, - "source": 8, - "pc": [ - 789 - ] - }, - { - "teal": 646, + "teal": 633, "source": 8, "pc": [ 790 ] }, { - "teal": 649, + "teal": 634, "source": 8, "pc": [ 791, - 792, - 793 + 792 ] }, { - "teal": 650, + "teal": 641, "source": 8, "pc": [ + 793, 794 ] }, { - "teal": 653, + "teal": 645, "source": 8, "pc": [ 795, - 796, - 797 + 796 ] }, { - "teal": 654, + "teal": 648, "source": 8, "pc": [ + 797, 798 ] }, { - "teal": 655, + "teal": 649, "source": 8, "pc": [ 799 ] }, { - "teal": 656, + "teal": 654, "source": 8, "pc": [ 800 @@ -3096,175 +3102,175 @@ "teal": 657, "source": 8, "pc": [ - 801 + 801, + 802, + 803 ] }, { "teal": 658, "source": 8, "pc": [ - 802 + 804 ] }, { "teal": 661, "source": 8, "pc": [ - 803, - 804 + 805, + 806, + 807 ] }, { "teal": 662, "source": 8, "pc": [ - 805 + 808 ] }, { "teal": 663, "source": 8, "pc": [ - 806 + 809 ] }, { "teal": 664, "source": 8, "pc": [ - 807 + 810 ] }, { "teal": 665, "source": 8, "pc": [ - 808, - 809 + 811 ] }, { "teal": 666, "source": 8, "pc": [ - 810 + 812 ] }, { - "teal": 667, + "teal": 669, "source": 8, "pc": [ - 811 + 813, + 814 ] }, { - "teal": 668, + "teal": 670, "source": 8, "pc": [ - 812 + 815 ] }, { "teal": 671, "source": 8, "pc": [ - 813, - 814, - 815 + 816 ] }, { "teal": 672, "source": 8, "pc": [ - 816 + 817 ] }, { "teal": 673, "source": 8, "pc": [ - 817 + 818, + 819 ] }, { "teal": 674, "source": 8, "pc": [ - 818 + 820 ] }, { "teal": 675, "source": 8, "pc": [ - 819 + 821 ] }, { - "teal": 687, + "teal": 676, "source": 8, "pc": [ - 820, - 821, 822 ] }, { - "teal": 690, + "teal": 679, "source": 8, "pc": [ - 823 + 823, + 824, + 825 ] }, { - "teal": 691, + "teal": 680, "source": 8, "pc": [ - 824, - 825 + 826 ] }, { - "teal": 698, + "teal": 681, "source": 8, "pc": [ - 826, 827 ] }, { - "teal": 699, + "teal": 682, "source": 8, "pc": [ - 828, - 829 + 828 ] }, { - "teal": 700, + "teal": 683, "source": 8, "pc": [ - 830, - 831 + 829 ] }, { - "teal": 701, + "teal": 695, "source": 8, "pc": [ + 830, + 831, 832 ] }, { - "teal": 702, + "teal": 698, "source": 8, "pc": [ 833 ] }, { - "teal": 707, + "teal": 699, "source": 8, "pc": [ 834, @@ -3272,7 +3278,7 @@ ] }, { - "teal": 708, + "teal": 706, "source": 8, "pc": [ 836, @@ -3280,7 +3286,7 @@ ] }, { - "teal": 709, + "teal": 707, "source": 8, "pc": [ 838, @@ -3288,7 +3294,7 @@ ] }, { - "teal": 710, + "teal": 708, "source": 8, "pc": [ 840, @@ -3296,84 +3302,90 @@ ] }, { - "teal": 711, + "teal": 709, "source": 8, "pc": [ 842 ] }, { - "teal": 712, + "teal": 710, "source": 8, "pc": [ 843 ] }, { - "teal": 713, + "teal": 715, "source": 8, "pc": [ 844, - 845, - 846 + 845 ] }, { - "teal": 722, + "teal": 716, "source": 8, "pc": [ + 846, 847 ] }, { - "teal": 723, + "teal": 717, "source": 8, "pc": [ - 848 + 848, + 849 ] }, { - "teal": 724, + "teal": 718, "source": 8, "pc": [ - 849, - 850 + 850, + 851 ] }, { - "teal": 728, + "teal": 719, "source": 8, "pc": [ - 851, 852 ] }, { - "teal": 729, + "teal": 720, "source": 8, "pc": [ - 853, - 854 + 853 ] }, { - "teal": 733, + "teal": 721, "source": 8, "pc": [ + 854, 855, 856 ] }, { - "teal": 734, + "teal": 730, + "source": 8, + "pc": [ + 857 + ] + }, + { + "teal": 731, "source": 8, "pc": [ - 857, 858 ] }, { - "teal": 735, + "teal": 732, "source": 8, "pc": [ 859, @@ -3381,7 +3393,7 @@ ] }, { - "teal": 739, + "teal": 736, "source": 8, "pc": [ 861, @@ -3389,7 +3401,7 @@ ] }, { - "teal": 740, + "teal": 737, "source": 8, "pc": [ 863, @@ -3405,29 +3417,23 @@ ] }, { - "teal": 744, - "source": 8, - "pc": [ - 867 - ] - }, - { - "teal": 745, + "teal": 742, "source": 8, "pc": [ - 868, - 869 + 867, + 868 ] }, { - "teal": 748, + "teal": 743, "source": 8, "pc": [ + 869, 870 ] }, { - "teal": 753, + "teal": 747, "source": 8, "pc": [ 871, @@ -3435,106 +3441,106 @@ ] }, { - "teal": 754, + "teal": 748, "source": 8, "pc": [ - 873 + 873, + 874 ] }, { - "teal": 755, + "teal": 749, "source": 8, "pc": [ - 874 + 875, + 876 ] }, { - "teal": 756, + "teal": 752, "source": 8, "pc": [ - 875, - 876, 877 ] }, { - "teal": 764, + "teal": 753, "source": 8, "pc": [ - 878 + 878, + 879 ] }, { - "teal": 765, + "teal": 756, "source": 8, "pc": [ - 879 + 880 ] }, { - "teal": 766, + "teal": 761, "source": 8, "pc": [ - 880, - 881 + 881, + 882 ] }, { - "teal": 770, + "teal": 762, "source": 8, "pc": [ - 882, 883 ] }, { - "teal": 771, + "teal": 763, "source": 8, "pc": [ - 884, - 885 + 884 ] }, { - "teal": 775, + "teal": 764, "source": 8, "pc": [ + 885, 886, 887 ] }, { - "teal": 776, + "teal": 772, "source": 8, "pc": [ - 888, - 889 + 888 ] }, { - "teal": 779, + "teal": 773, "source": 8, "pc": [ - 890 + 889 ] }, { - "teal": 780, + "teal": 774, "source": 8, "pc": [ - 891, - 892 + 890, + 891 ] }, { - "teal": 783, + "teal": 778, "source": 8, "pc": [ + 892, 893 ] }, { - "teal": 788, + "teal": 779, "source": 8, "pc": [ 894, @@ -3542,45 +3548,45 @@ ] }, { - "teal": 789, + "teal": 783, "source": 8, "pc": [ 896, - 897, - 898 + 897 ] }, { - "teal": 794, + "teal": 784, "source": 8, "pc": [ - 899, - 900 + 898, + 899 ] }, { - "teal": 795, + "teal": 787, "source": 8, "pc": [ - 901 + 900 ] }, { - "teal": 796, + "teal": 788, "source": 8, "pc": [ + 901, 902 ] }, { - "teal": 797, + "teal": 791, "source": 8, "pc": [ 903 ] }, { - "teal": 798, + "teal": 796, "source": 8, "pc": [ 904, @@ -3588,139 +3594,139 @@ ] }, { - "teal": 802, + "teal": 797, "source": 8, "pc": [ 906, - 907 + 907, + 908 ] }, { - "teal": 803, + "teal": 802, "source": 8, "pc": [ - 908, 909, 910 ] }, { - "teal": 804, + "teal": 803, "source": 8, "pc": [ - 911, - 912 + 911 ] }, { - "teal": 809, + "teal": 804, "source": 8, "pc": [ - 913, - 914 + 912 ] }, { - "teal": 810, + "teal": 805, "source": 8, "pc": [ - 915 + 913 ] }, { - "teal": 811, + "teal": 806, "source": 8, "pc": [ - 916 + 914, + 915 ] }, { - "teal": 812, + "teal": 810, "source": 8, "pc": [ - 917, - 918, - 919 + 916, + 917 ] }, { - "teal": 820, + "teal": 811, "source": 8, "pc": [ + 918, + 919, 920 ] }, { - "teal": 821, + "teal": 812, "source": 8, "pc": [ - 921 + 921, + 922 ] }, { - "teal": 822, + "teal": 817, "source": 8, "pc": [ - 922, - 923 + 923, + 924 ] }, { - "teal": 826, + "teal": 818, "source": 8, "pc": [ - 924, 925 ] }, { - "teal": 827, + "teal": 819, "source": 8, "pc": [ - 926, - 927 + 926 ] }, { - "teal": 831, + "teal": 820, "source": 8, "pc": [ + 927, 928, 929 ] }, { - "teal": 832, + "teal": 828, "source": 8, "pc": [ - 930, - 931 + 930 ] }, { - "teal": 835, + "teal": 829, "source": 8, "pc": [ - 932 + 931 ] }, { - "teal": 836, + "teal": 830, "source": 8, "pc": [ - 933, - 934 + 932, + 933 ] }, { - "teal": 839, + "teal": 834, "source": 8, "pc": [ + 934, 935 ] }, { - "teal": 845, + "teal": 835, "source": 8, "pc": [ 936, @@ -3728,7 +3734,7 @@ ] }, { - "teal": 846, + "teal": 839, "source": 8, "pc": [ 938, @@ -3736,7 +3742,7 @@ ] }, { - "teal": 847, + "teal": 840, "source": 8, "pc": [ 940, @@ -3744,45 +3750,45 @@ ] }, { - "teal": 848, + "teal": 843, "source": 8, "pc": [ - 942, - 943 + 942 ] }, { - "teal": 849, + "teal": 844, "source": 8, "pc": [ + 943, 944 ] }, { - "teal": 850, + "teal": 847, "source": 8, "pc": [ 945 ] }, { - "teal": 851, + "teal": 853, "source": 8, "pc": [ - 946 + 946, + 947 ] }, { - "teal": 852, + "teal": 854, "source": 8, "pc": [ - 947, 948, 949 ] }, { - "teal": 857, + "teal": 855, "source": 8, "pc": [ 950, @@ -3790,7 +3796,7 @@ ] }, { - "teal": 858, + "teal": 856, "source": 8, "pc": [ 952, @@ -3798,22 +3804,28 @@ ] }, { - "teal": 863, + "teal": 857, + "source": 8, + "pc": [ + 954 + ] + }, + { + "teal": 858, "source": 8, "pc": [ - 954, 955 ] }, { - "teal": 864, + "teal": 859, "source": 8, "pc": [ 956 ] }, { - "teal": 865, + "teal": 860, "source": 8, "pc": [ 957, @@ -3822,7 +3834,7 @@ ] }, { - "teal": 870, + "teal": 865, "source": 8, "pc": [ 960, @@ -3830,7 +3842,7 @@ ] }, { - "teal": 871, + "teal": 866, "source": 8, "pc": [ 962, @@ -3838,45 +3850,39 @@ ] }, { - "teal": 872, + "teal": 871, "source": 8, "pc": [ - 964 + 964, + 965 ] }, { - "teal": 873, + "teal": 872, "source": 8, "pc": [ - 965, 966 ] }, { - "teal": 879, + "teal": 873, "source": 8, "pc": [ 967, - 968 - ] - }, - { - "teal": 880, - "source": 8, - "pc": [ - 969, - 970 + 968, + 969 ] }, { - "teal": 881, + "teal": 878, "source": 8, "pc": [ + 970, 971 ] }, { - "teal": 882, + "teal": 879, "source": 8, "pc": [ 972, @@ -3884,22 +3890,22 @@ ] }, { - "teal": 883, + "teal": 880, "source": 8, "pc": [ - 974, - 975 + 974 ] }, { - "teal": 884, + "teal": 881, "source": 8, "pc": [ + 975, 976 ] }, { - "teal": 885, + "teal": 887, "source": 8, "pc": [ 977, @@ -3907,120 +3913,114 @@ ] }, { - "teal": 886, + "teal": 888, "source": 8, "pc": [ - 979 + 979, + 980 ] }, { - "teal": 887, + "teal": 889, "source": 8, "pc": [ - 980 + 981 ] }, { - "teal": 888, + "teal": 890, "source": 8, "pc": [ - 981, 982, 983 ] }, { - "teal": 896, + "teal": 891, "source": 8, "pc": [ - 984 + 984, + 985 ] }, { - "teal": 897, + "teal": 892, "source": 8, "pc": [ - 985 + 986 ] }, { - "teal": 898, + "teal": 893, "source": 8, "pc": [ - 986, - 987 + 987, + 988 ] }, { - "teal": 902, + "teal": 894, "source": 8, "pc": [ - 988, 989 ] }, { - "teal": 903, + "teal": 895, "source": 8, "pc": [ - 990, - 991 + 990 ] }, { - "teal": 907, + "teal": 896, "source": 8, "pc": [ + 991, 992, 993 ] }, { - "teal": 908, + "teal": 904, "source": 8, "pc": [ - 994, - 995 + 994 ] }, { - "teal": 911, + "teal": 905, "source": 8, "pc": [ - 996 + 995 ] }, { - "teal": 912, + "teal": 906, "source": 8, "pc": [ - 997, - 998 + 996, + 997 ] }, { - "teal": 915, + "teal": 910, "source": 8, "pc": [ + 998, 999 ] }, { - "teal": 925, - "source": 8, - "pc": [ - 1000 - ] - }, - { - "teal": 926, + "teal": 911, "source": 8, "pc": [ + 1000, 1001 ] }, { - "teal": 927, + "teal": 915, "source": 8, "pc": [ 1002, @@ -4028,7 +4028,7 @@ ] }, { - "teal": 931, + "teal": 916, "source": 8, "pc": [ 1004, @@ -4036,106 +4036,106 @@ ] }, { - "teal": 932, + "teal": 919, "source": 8, "pc": [ - 1006, - 1007 + 1006 ] }, { - "teal": 936, + "teal": 920, "source": 8, "pc": [ - 1008, - 1009 + 1007, + 1008 ] }, { - "teal": 937, + "teal": 923, "source": 8, "pc": [ - 1010, - 1011 + 1009 ] }, { - "teal": 941, + "teal": 933, "source": 8, "pc": [ - 1012 + 1010 ] }, { - "teal": 942, + "teal": 934, "source": 8, "pc": [ - 1013, - 1014 + 1011 ] }, { - "teal": 946, + "teal": 935, "source": 8, "pc": [ - 1015, - 1016 + 1012, + 1013 ] }, { - "teal": 947, + "teal": 939, "source": 8, "pc": [ - 1017, - 1018 + 1014, + 1015 ] }, { - "teal": 948, + "teal": 940, "source": 8, "pc": [ - 1019, - 1020 + 1016, + 1017 ] }, { - "teal": 951, + "teal": 944, "source": 8, "pc": [ - 1021 + 1018, + 1019 ] }, { - "teal": 952, + "teal": 945, "source": 8, "pc": [ - 1022, - 1023 + 1020, + 1021 ] }, { - "teal": 955, + "teal": 949, "source": 8, "pc": [ - 1024 + 1022 ] }, { - "teal": 964, + "teal": 950, "source": 8, "pc": [ - 1025 + 1023, + 1024 ] }, { - "teal": 965, + "teal": 954, "source": 8, "pc": [ + 1025, 1026 ] }, { - "teal": 966, + "teal": 955, "source": 8, "pc": [ 1027, @@ -4143,7 +4143,7 @@ ] }, { - "teal": 970, + "teal": 956, "source": 8, "pc": [ 1029, @@ -4151,31 +4151,43 @@ ] }, { - "teal": 971, + "teal": 959, + "source": 8, + "pc": [ + 1031 + ] + }, + { + "teal": 960, "source": 8, "pc": [ - 1031, - 1032 + 1032, + 1033 ] }, { - "teal": 975, + "teal": 963, "source": 8, "pc": [ - 1033, 1034 ] }, { - "teal": 976, + "teal": 972, + "source": 8, + "pc": [ + 1035 + ] + }, + { + "teal": 973, "source": 8, "pc": [ - 1035, 1036 ] }, { - "teal": 977, + "teal": 974, "source": 8, "pc": [ 1037, @@ -4183,7 +4195,7 @@ ] }, { - "teal": 981, + "teal": 978, "source": 8, "pc": [ 1039, @@ -4191,7 +4203,7 @@ ] }, { - "teal": 982, + "teal": 979, "source": 8, "pc": [ 1041, @@ -4207,29 +4219,23 @@ ] }, { - "teal": 986, - "source": 8, - "pc": [ - 1045 - ] - }, - { - "teal": 987, + "teal": 984, "source": 8, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 990, + "teal": 985, "source": 8, "pc": [ + 1047, 1048 ] }, { - "teal": 994, + "teal": 989, "source": 8, "pc": [ 1049, @@ -4237,7 +4243,7 @@ ] }, { - "teal": 998, + "teal": 990, "source": 8, "pc": [ 1051, @@ -4245,7 +4251,7 @@ ] }, { - "teal": 1001, + "teal": 991, "source": 8, "pc": [ 1053, @@ -4253,137 +4259,137 @@ ] }, { - "teal": 1002, + "teal": 994, "source": 8, "pc": [ 1055 ] }, { - "teal": 1007, + "teal": 995, "source": 8, "pc": [ 1056, - 1057, - 1058 + 1057 ] }, { - "teal": 1008, + "teal": 998, "source": 8, "pc": [ - 1059 + 1058 ] }, { - "teal": 1011, + "teal": 1002, "source": 8, "pc": [ - 1060, - 1061, - 1062 + 1059, + 1060 ] }, { - "teal": 1012, + "teal": 1006, "source": 8, "pc": [ - 1063 + 1061, + 1062 ] }, { - "teal": 1013, + "teal": 1009, "source": 8, "pc": [ + 1063, 1064 ] }, { - "teal": 1021, + "teal": 1010, "source": 8, "pc": [ - 1065, - 1066, - 1067 + 1065 ] }, { - "teal": 1024, + "teal": 1015, "source": 8, "pc": [ + 1066, + 1067, 1068 ] }, { - "teal": 1028, + "teal": 1016, "source": 8, "pc": [ - 1069, - 1070 + 1069 ] }, { - "teal": 1029, + "teal": 1019, "source": 8, "pc": [ - 1071 + 1070, + 1071, + 1072 ] }, { - "teal": 1030, + "teal": 1020, "source": 8, "pc": [ - 1072 + 1073 ] }, { - "teal": 1031, + "teal": 1021, "source": 8, "pc": [ - 1073, 1074 ] }, { - "teal": 1041, + "teal": 1029, "source": 8, "pc": [ - 1075 + 1075, + 1076, + 1077 ] }, { - "teal": 1042, + "teal": 1032, "source": 8, "pc": [ - 1076 + 1078 ] }, { - "teal": 1043, + "teal": 1036, "source": 8, "pc": [ - 1077, - 1078 + 1079, + 1080 ] }, { - "teal": 1047, + "teal": 1037, "source": 8, "pc": [ - 1079, - 1080 + 1081 ] }, { - "teal": 1048, + "teal": 1038, "source": 8, "pc": [ - 1081, 1082 ] }, { - "teal": 1052, + "teal": 1039, "source": 8, "pc": [ 1083, @@ -4391,15 +4397,21 @@ ] }, { - "teal": 1053, + "teal": 1049, + "source": 8, + "pc": [ + 1085 + ] + }, + { + "teal": 1050, "source": 8, "pc": [ - 1085, 1086 ] }, { - "teal": 1057, + "teal": 1051, "source": 8, "pc": [ 1087, @@ -4407,7 +4419,7 @@ ] }, { - "teal": 1058, + "teal": 1055, "source": 8, "pc": [ 1089, @@ -4415,7 +4427,7 @@ ] }, { - "teal": 1059, + "teal": 1056, "source": 8, "pc": [ 1091, @@ -4426,127 +4438,127 @@ "teal": 1060, "source": 8, "pc": [ - 1093 + 1093, + 1094 ] }, { "teal": 1061, "source": 8, "pc": [ - 1094, - 1095 + 1095, + 1096 ] }, { "teal": 1065, "source": 8, "pc": [ - 1096, - 1097 + 1097, + 1098 ] }, { "teal": 1066, "source": 8, "pc": [ - 1098, - 1099 + 1099, + 1100 ] }, { - "teal": 1070, + "teal": 1067, "source": 8, "pc": [ - 1100, - 1101 + 1101, + 1102 ] }, { - "teal": 1071, + "teal": 1068, "source": 8, "pc": [ - 1102, 1103 ] }, { - "teal": 1074, + "teal": 1069, "source": 8, "pc": [ - 1104 + 1104, + 1105 ] }, { - "teal": 1075, + "teal": 1073, "source": 8, "pc": [ - 1105, - 1106 + 1106, + 1107 ] }, { - "teal": 1078, + "teal": 1074, "source": 8, "pc": [ - 1107 + 1108, + 1109 ] }, { - "teal": 1086, + "teal": 1078, "source": 8, "pc": [ - 1108 + 1110, + 1111 ] }, { - "teal": 1087, + "teal": 1079, "source": 8, "pc": [ - 1109 + 1112, + 1113 ] }, { - "teal": 1088, + "teal": 1082, "source": 8, "pc": [ - 1110, - 1111 + 1114 ] }, { - "teal": 1092, + "teal": 1083, "source": 8, "pc": [ - 1112, - 1113 + 1115, + 1116 ] }, { - "teal": 1093, + "teal": 1086, "source": 8, "pc": [ - 1114, - 1115 + 1117 ] }, { - "teal": 1097, + "teal": 1094, "source": 8, "pc": [ - 1116, - 1117 + 1118 ] }, { - "teal": 1098, + "teal": 1095, "source": 8, "pc": [ - 1118, 1119 ] }, { - "teal": 1102, + "teal": 1096, "source": 8, "pc": [ 1120, @@ -4554,7 +4566,7 @@ ] }, { - "teal": 1103, + "teal": 1100, "source": 8, "pc": [ 1122, @@ -4562,204 +4574,198 @@ ] }, { - "teal": 1104, + "teal": 1101, "source": 8, "pc": [ - 1124 + 1124, + 1125 ] }, { "teal": 1105, "source": 8, "pc": [ - 1125, - 1126 + 1126, + 1127 ] }, { "teal": 1106, "source": 8, "pc": [ - 1127, - 1128 - ] - }, - { - "teal": 1107, - "source": 8, - "pc": [ + 1128, 1129 ] }, { - "teal": 1108, + "teal": 1110, "source": 8, "pc": [ - 1130 + 1130, + 1131 ] }, { - "teal": 1109, + "teal": 1111, "source": 8, "pc": [ - 1131, - 1132 + 1132, + 1133 ] }, { "teal": 1112, "source": 8, "pc": [ - 1133 + 1134 ] }, { "teal": 1113, "source": 8, "pc": [ - 1134, - 1135 + 1135, + 1136 ] }, { - "teal": 1116, + "teal": 1114, "source": 8, "pc": [ - 1136 + 1137, + 1138 ] }, { - "teal": 1117, + "teal": 1115, "source": 8, "pc": [ - 1137 + 1139 ] }, { - "teal": 1122, + "teal": 1116, "source": 8, "pc": [ - 1138, - 1139, 1140 ] }, { - "teal": 1123, + "teal": 1117, "source": 8, "pc": [ - 1141 + 1141, + 1142 ] }, { - "teal": 1126, + "teal": 1120, "source": 8, "pc": [ - 1142, - 1143, - 1144 + 1143 ] }, { - "teal": 1127, + "teal": 1121, "source": 8, "pc": [ + 1144, 1145 ] }, { - "teal": 1128, + "teal": 1124, "source": 8, "pc": [ 1146 ] }, { - "teal": 1137, + "teal": 1125, "source": 8, "pc": [ - 1147, - 1148, - 1149 + 1147 ] }, { - "teal": 1140, + "teal": 1130, "source": 8, "pc": [ + 1148, + 1149, 1150 ] }, { - "teal": 1144, + "teal": 1131, "source": 8, "pc": [ - 1151, - 1152 + 1151 ] }, { - "teal": 1145, + "teal": 1134, "source": 8, "pc": [ - 1153 + 1152, + 1153, + 1154 ] }, { - "teal": 1146, + "teal": 1135, "source": 8, "pc": [ - 1154 + 1155 ] }, { - "teal": 1147, + "teal": 1136, "source": 8, "pc": [ - 1155, 1156 ] }, { - "teal": 1157, + "teal": 1145, "source": 8, "pc": [ - 1157 + 1157, + 1158, + 1159 ] }, { - "teal": 1158, + "teal": 1148, "source": 8, "pc": [ - 1158 + 1160 ] }, { - "teal": 1159, + "teal": 1152, "source": 8, "pc": [ - 1159, - 1160 + 1161, + 1162 ] }, { - "teal": 1163, + "teal": 1153, "source": 8, "pc": [ - 1161, - 1162 + 1163 ] }, { - "teal": 1164, + "teal": 1154, "source": 8, "pc": [ - 1163, 1164 ] }, { - "teal": 1168, + "teal": 1155, "source": 8, "pc": [ 1165, @@ -4767,192 +4773,198 @@ ] }, { - "teal": 1169, + "teal": 1165, + "source": 8, + "pc": [ + 1167 + ] + }, + { + "teal": 1166, "source": 8, "pc": [ - 1167, 1168 ] }, { - "teal": 1170, + "teal": 1167, "source": 8, "pc": [ - 1169 + 1169, + 1170 ] }, { "teal": 1171, "source": 8, "pc": [ - 1170, - 1171 + 1171, + 1172 ] }, { - "teal": 1175, + "teal": 1172, "source": 8, "pc": [ - 1172, - 1173 + 1173, + 1174 ] }, { "teal": 1176, "source": 8, "pc": [ - 1174, - 1175 + 1175, + 1176 ] }, { "teal": 1177, "source": 8, "pc": [ - 1176, - 1177 + 1177, + 1178 ] }, { "teal": 1178, "source": 8, "pc": [ - 1178 + 1179 ] }, { "teal": 1179, "source": 8, "pc": [ - 1179, - 1180 + 1180, + 1181 ] }, { "teal": 1183, "source": 8, "pc": [ - 1181, - 1182 + 1182, + 1183 ] }, { "teal": 1184, "source": 8, "pc": [ - 1183, - 1184 + 1184, + 1185 ] }, { - "teal": 1188, + "teal": 1185, "source": 8, "pc": [ - 1185, - 1186 + 1186, + 1187 ] }, { - "teal": 1189, + "teal": 1186, "source": 8, "pc": [ - 1187, 1188 ] }, { - "teal": 1190, + "teal": 1187, "source": 8, "pc": [ - 1189 + 1189, + 1190 ] }, { "teal": 1191, "source": 8, "pc": [ - 1190, - 1191 + 1191, + 1192 ] }, { - "teal": 1194, + "teal": 1192, "source": 8, "pc": [ - 1192 + 1193, + 1194 ] }, { - "teal": 1195, + "teal": 1196, "source": 8, "pc": [ - 1193, - 1194 + 1195, + 1196 ] }, { - "teal": 1198, + "teal": 1197, "source": 8, "pc": [ - 1195 + 1197, + 1198 ] }, { - "teal": 1206, + "teal": 1198, "source": 8, "pc": [ - 1196 + 1199 ] }, { - "teal": 1207, + "teal": 1199, "source": 8, "pc": [ - 1197 + 1200, + 1201 ] }, { - "teal": 1208, + "teal": 1202, "source": 8, "pc": [ - 1198, - 1199 + 1202 ] }, { - "teal": 1212, + "teal": 1203, "source": 8, "pc": [ - 1200, - 1201 + 1203, + 1204 ] }, { - "teal": 1213, + "teal": 1206, "source": 8, "pc": [ - 1202, - 1203 + 1205 ] }, { - "teal": 1217, + "teal": 1214, "source": 8, "pc": [ - 1204, - 1205 + 1206 ] }, { - "teal": 1218, + "teal": 1215, "source": 8, "pc": [ - 1206, 1207 ] }, { - "teal": 1222, + "teal": 1216, "source": 8, "pc": [ 1208, @@ -4960,7 +4972,7 @@ ] }, { - "teal": 1223, + "teal": 1220, "source": 8, "pc": [ 1210, @@ -4968,459 +4980,459 @@ ] }, { - "teal": 1224, + "teal": 1221, "source": 8, "pc": [ - 1212 + 1212, + 1213 ] }, { "teal": 1225, "source": 8, "pc": [ - 1213, - 1214 + 1214, + 1215 ] }, { "teal": 1226, "source": 8, "pc": [ - 1215, - 1216 - ] - }, - { - "teal": 1227, - "source": 8, - "pc": [ + 1216, 1217 ] }, { - "teal": 1228, + "teal": 1230, "source": 8, "pc": [ - 1218 + 1218, + 1219 ] }, { - "teal": 1229, + "teal": 1231, "source": 8, "pc": [ - 1219, - 1220 + 1220, + 1221 ] }, { "teal": 1232, "source": 8, "pc": [ - 1221 + 1222 ] }, { "teal": 1233, "source": 8, "pc": [ - 1222, - 1223 + 1223, + 1224 ] }, { - "teal": 1236, + "teal": 1234, "source": 8, "pc": [ - 1224 + 1225, + 1226 ] }, { - "teal": 1237, + "teal": 1235, "source": 8, "pc": [ - 1225 + 1227 ] }, { - "teal": 1242, + "teal": 1236, "source": 8, "pc": [ - 1226 + 1228 ] }, { - "teal": 1245, + "teal": 1237, "source": 8, "pc": [ - 1227, - 1228, - 1229 + 1229, + 1230 ] }, { - "teal": 1246, + "teal": 1240, "source": 8, "pc": [ - 1230 + 1231 ] }, { - "teal": 1247, + "teal": 1241, "source": 8, "pc": [ - 1231 + 1232, + 1233 ] }, { - "teal": 1248, + "teal": 1244, "source": 8, "pc": [ - 1232 + 1234 ] }, { - "teal": 1249, + "teal": 1245, "source": 8, "pc": [ - 1233 + 1235 ] }, { "teal": 1250, "source": 8, "pc": [ - 1234 + 1236 ] }, { "teal": 1253, "source": 8, "pc": [ - 1235, - 1236, - 1237 + 1237, + 1238, + 1239 ] }, { "teal": 1254, "source": 8, "pc": [ - 1238 + 1240 ] }, { "teal": 1255, "source": 8, "pc": [ - 1239 + 1241 ] }, { "teal": 1256, "source": 8, "pc": [ - 1240 + 1242 ] }, { "teal": 1257, "source": 8, "pc": [ - 1241 + 1243 ] }, { - "teal": 1267, + "teal": 1258, "source": 8, "pc": [ - 1242, - 1243, 1244 ] }, { - "teal": 1271, + "teal": 1261, "source": 8, "pc": [ 1245, - 1246 + 1246, + 1247 ] }, { - "teal": 1272, + "teal": 1262, "source": 8, "pc": [ - 1247 + 1248 ] }, { - "teal": 1273, + "teal": 1263, "source": 8, "pc": [ - 1248 + 1249 ] }, { - "teal": 1274, + "teal": 1264, "source": 8, "pc": [ - 1249 + 1250 ] }, { - "teal": 1275, + "teal": 1265, "source": 8, "pc": [ - 1250, - 1251, - 1252 + 1251 ] }, { - "teal": 1276, + "teal": 1275, "source": 8, "pc": [ + 1252, 1253, 1254 ] }, { - "teal": 1277, + "teal": 1279, "source": 8, "pc": [ - 1255 + 1255, + 1256 ] }, { - "teal": 1278, + "teal": 1280, "source": 8, "pc": [ - 1256 + 1257 ] }, { - "teal": 1279, + "teal": 1281, "source": 8, "pc": [ - 1257, - 1258, - 1259 + 1258 ] }, { "teal": 1282, "source": 8, "pc": [ - 1260, - 1261 + 1259 ] }, { - "teal": 1285, + "teal": 1283, "source": 8, "pc": [ + 1260, + 1261, 1262 ] }, { - "teal": 1290, + "teal": 1284, "source": 8, "pc": [ 1263, - 1264, - 1265 + 1264 ] }, { - "teal": 1291, + "teal": 1285, "source": 8, "pc": [ - 1266 + 1265 ] }, { - "teal": 1292, + "teal": 1286, "source": 8, "pc": [ - 1267 + 1266 ] }, { - "teal": 1298, + "teal": 1287, "source": 8, "pc": [ + 1267, 1268, - 1269, - 1270 + 1269 ] }, { - "teal": 1301, + "teal": 1290, "source": 8, "pc": [ + 1270, 1271 ] }, { - "teal": 1305, + "teal": 1293, "source": 8, "pc": [ - 1272, - 1273 + 1272 ] }, { - "teal": 1306, + "teal": 1298, "source": 8, "pc": [ - 1274 + 1273, + 1274, + 1275 ] }, { - "teal": 1307, + "teal": 1299, "source": 8, "pc": [ - 1275 + 1276 ] }, { - "teal": 1308, + "teal": 1300, "source": 8, "pc": [ - 1276, 1277 ] }, { - "teal": 1312, + "teal": 1306, "source": 8, "pc": [ 1278, - 1279 + 1279, + 1280 ] }, { - "teal": 1313, + "teal": 1309, "source": 8, "pc": [ - 1280, 1281 ] }, { - "teal": 1314, + "teal": 1313, "source": 8, "pc": [ - 1282 + 1282, + 1283 ] }, { - "teal": 1315, + "teal": 1314, "source": 8, "pc": [ - 1283, 1284 ] }, { - "teal": 1316, + "teal": 1315, "source": 8, "pc": [ - 1285, - 1286 + 1285 ] }, { - "teal": 1317, + "teal": 1316, "source": 8, "pc": [ + 1286, 1287 ] }, { - "teal": 1318, + "teal": 1320, "source": 8, "pc": [ - 1288 + 1288, + 1289 ] }, { - "teal": 1319, + "teal": 1321, "source": 8, "pc": [ - 1289 + 1290, + 1291 ] }, { - "teal": 1320, + "teal": 1322, "source": 8, "pc": [ - 1290 + 1292 ] }, { - "teal": 1321, + "teal": 1323, "source": 8, "pc": [ - 1291 + 1293, + 1294 ] }, { - "teal": 1329, + "teal": 1324, "source": 8, "pc": [ - 1292 + 1295, + 1296 ] }, { - "teal": 1330, + "teal": 1325, "source": 8, "pc": [ - 1293 + 1297 ] }, { - "teal": 1331, + "teal": 1326, "source": 8, "pc": [ - 1294, - 1295 + 1298 ] }, { - "teal": 1335, + "teal": 1327, "source": 8, "pc": [ - 1296, - 1297 + 1299 ] }, { - "teal": 1336, + "teal": 1328, "source": 8, "pc": [ - 1298, - 1299 + 1300 ] }, { - "teal": 1340, + "teal": 1329, "source": 8, "pc": [ - 1300, 1301 ] }, { - "teal": 1341, + "teal": 1337, + "source": 8, + "pc": [ + 1302 + ] + }, + { + "teal": 1338, "source": 8, "pc": [ - 1302, 1303 ] }, { - "teal": 1345, + "teal": 1339, "source": 8, "pc": [ 1304, @@ -5428,7 +5440,7 @@ ] }, { - "teal": 1346, + "teal": 1343, "source": 8, "pc": [ 1306, @@ -5436,122 +5448,122 @@ ] }, { - "teal": 1347, + "teal": 1344, "source": 8, "pc": [ - 1308 + 1308, + 1309 ] }, { "teal": 1348, "source": 8, "pc": [ - 1309, - 1310 + 1310, + 1311 ] }, { "teal": 1349, "source": 8, "pc": [ - 1311, - 1312 - ] - }, - { - "teal": 1350, - "source": 8, - "pc": [ + 1312, 1313 ] }, { - "teal": 1351, + "teal": 1353, "source": 8, "pc": [ - 1314 + 1314, + 1315 ] }, { - "teal": 1352, + "teal": 1354, "source": 8, "pc": [ - 1315, - 1316 + 1316, + 1317 ] }, { "teal": 1355, "source": 8, "pc": [ - 1317 + 1318 ] }, { "teal": 1356, "source": 8, "pc": [ - 1318, - 1319 + 1319, + 1320 ] }, { - "teal": 1359, + "teal": 1357, "source": 8, "pc": [ - 1320 + 1321, + 1322 ] }, { - "teal": 1360, + "teal": 1358, "source": 8, "pc": [ - 1321 + 1323 ] }, { - "teal": 1365, - "source": 4, + "teal": 1359, + "source": 8, "pc": [ - 1322, - 1323, 1324 ] }, { - "teal": 1366, - "source": 4, + "teal": 1360, + "source": 8, "pc": [ - 1325 + 1325, + 1326 ] }, { - "teal": 1367, - "source": 4, + "teal": 1363, + "source": 8, "pc": [ - 1326 + 1327 ] }, { - "teal": 1371, - "source": 4, + "teal": 1364, + "source": 8, "pc": [ - 1327, 1328, 1329 ] }, { - "teal": 1375, - "source": 5, + "teal": 1367, + "source": 8, + "pc": [ + 1330 + ] + }, + { + "teal": 1368, + "source": 8, "pc": [ - 1330, 1331 ] }, { - "teal": 1376, - "source": 5, + "teal": 1373, + "source": 4, "pc": [ 1332, 1333, @@ -5559,198 +5571,228 @@ ] }, { - "teal": 1377, - "source": 5, + "teal": 1374, + "source": 4, "pc": [ - 1335, - 1336 + 1335 ] }, { - "teal": 1378, - "source": 5, + "teal": 1375, + "source": 4, "pc": [ - 1337 + 1336 ] }, { "teal": 1379, - "source": 5, + "source": 4, "pc": [ - 1338 + 1337, + 1338, + 1339 ] }, { - "teal": 1380, + "teal": 1383, "source": 5, "pc": [ - 1339 + 1340, + 1341 ] }, { - "teal": 1381, - "source": 4, + "teal": 1384, + "source": 5, "pc": [ - 1340 + 1342, + 1343, + 1344 ] }, { - "teal": 1384, - "source": 3, + "teal": 1385, + "source": 5, "pc": [ - 1341, - 1342, - 1343, - 1344, 1345, 1346 ] }, { - "teal": 1385, - "source": 3, + "teal": 1386, + "source": 5, + "pc": [ + 1347 + ] + }, + { + "teal": 1387, + "source": 5, + "pc": [ + 1348 + ] + }, + { + "teal": 1388, + "source": 5, "pc": [ - 1347, - 1348, 1349 ] }, { - "teal": 1386, - "source": 3, + "teal": 1389, + "source": 4, "pc": [ - 1350, - 1351, - 1352, - 1353 + 1350 ] }, { - "teal": 1387, + "teal": 1392, "source": 3, "pc": [ - 1354 + 1351, + 1352, + 1353, + 1354, + 1355, + 1356 ] }, { - "teal": 1390, + "teal": 1393, "source": 3, "pc": [ - 1355, - 1356, 1357, 1358, - 1359, - 1360 + 1359 ] }, { - "teal": 1391, + "teal": 1394, "source": 3, "pc": [ + 1360, 1361, 1362, - 1363, - 1364, - 1365, - 1366 + 1363 ] }, { - "teal": 1392, + "teal": 1395, + "source": 3, + "pc": [ + 1364 + ] + }, + { + "teal": 1398, "source": 3, "pc": [ + 1365, + 1366, 1367, 1368, 1369, - 1370, - 1371, - 1372 + 1370 ] }, { - "teal": 1393, + "teal": 1399, "source": 3, "pc": [ + 1371, + 1372, 1373, 1374, 1375, - 1376, - 1377, - 1378 + 1376 ] }, { - "teal": 1394, + "teal": 1400, "source": 3, "pc": [ + 1377, + 1378, 1379, 1380, 1381, - 1382, - 1383, - 1384 + 1382 ] }, { - "teal": 1395, + "teal": 1401, "source": 3, "pc": [ + 1383, + 1384, 1385, 1386, 1387, - 1388, - 1389, - 1390 + 1388 ] }, { - "teal": 1396, + "teal": 1402, "source": 3, "pc": [ + 1389, + 1390, 1391, 1392, 1393, - 1394, - 1395, - 1396 + 1394 ] }, { - "teal": 1397, + "teal": 1403, "source": 3, "pc": [ + 1395, + 1396, 1397, 1398, 1399, - 1400, - 1401, - 1402 + 1400 ] }, { - "teal": 1398, + "teal": 1404, "source": 3, "pc": [ + 1401, + 1402, 1403, 1404, - 1405 + 1405, + 1406 ] }, { - "teal": 1399, + "teal": 1405, "source": 3, "pc": [ - 1406, 1407, 1408, 1409, 1410, 1411, - 1412, + 1412 + ] + }, + { + "teal": 1406, + "source": 3, + "pc": [ 1413, 1414, - 1415, + 1415 + ] + }, + { + "teal": 1407, + "source": 3, + "pc": [ 1416, 1417, 1418, @@ -5758,52 +5800,62 @@ 1420, 1421, 1422, - 1423 + 1423, + 1424, + 1425, + 1426, + 1427, + 1428, + 1429, + 1430, + 1431, + 1432, + 1433 ] }, { - "teal": 1400, + "teal": 1408, "source": 3, "pc": [ - 1424 + 1434 ] }, { - "teal": 1403, + "teal": 1411, "source": 3, "pc": [ - 1425, - 1426, - 1427, - 1428, - 1429, - 1430 + 1435, + 1436, + 1437, + 1438, + 1439, + 1440 ] }, { - "teal": 1404, + "teal": 1412, "source": 3, "pc": [ - 1431, - 1432, - 1433 + 1441, + 1442, + 1443 ] }, { - "teal": 1405, + "teal": 1413, "source": 3, "pc": [ - 1434, - 1435, - 1436, - 1437 + 1444, + 1445, + 1446, + 1447 ] }, { - "teal": 1406, + "teal": 1414, "source": 3, "pc": [ - 1438 + 1448 ] } ] \ 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 363e4f0a0..efc98ae42 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": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjQ4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NDkKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjIKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjYyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY1CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCiphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYXNzZXQ6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg1CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODYKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NwoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5NwoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTAxCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDUKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA2CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDcKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNAoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE4CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTkKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzAKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzIKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM0CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNgoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NAoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDkKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTAKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MQoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2OQoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc1CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NgoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODMKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODgKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MgoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDIKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMwoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjUKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzgKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDIKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjQKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjYKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjczCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzQKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyODcKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NAoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk2CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OAoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", "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 6017f07f0..2be0e4a00 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+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NQoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY2CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0KQoJY2FsbHN1YiBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvCgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhyZWNlaXZlcjogQWRkcmVzcywgYXNzZXQ6IEFzc2V0SUQpOiBTZW5kQXNzZXRJbmZvCi8vCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXNzZXQgVGhlIGFzc2V0IHRvIHNlbmQKLy8KLy8gQHJldHVybnMgUmV0dXJucyB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uIGZvciBzZW5kaW5nIGFuIGFzc2V0OgovLyBUaGUgbnVtYmVyIG9mIGl0eG5zIHJlcXVpcmVkLCB0aGUgTUJSIHJlcXVpcmVkLCB3aGV0aGVyIHRoZSByb3V0ZXIgaXMgb3B0ZWQgaW4sIHdoZXRoZXIgdGhlIHJlY2VpdmVyIGlzIG9wdGVkIGluLAovLyBhbmQgaG93IG11Y2ggQUxHTyB0aGUgcmVjZWl2ZXIgd291bGQgbmVlZCB0byBjbGFpbSB0aGUgYXNzZXQKYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbzoKCXByb3RvIDIgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4NQoJLy8gcm91dGVyT3B0ZWRJbiA9IHRoaXMuYXBwLmFkZHJlc3MuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg2CgkvLyByZWNlaXZlck9wdGVkSW4gPSByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIGluZm86IFNlbmRBc3NldEluZm8gPSB7CgkvLyAgICAgICBpdHhuczogMSwKCS8vICAgICAgIG1icjogMCwKCS8vICAgICAgIHJvdXRlck9wdGVkSW46IHJvdXRlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlck9wdGVkSW46IHJlY2VpdmVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltOiAwLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWYxX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJlY2VpdmVyT3B0ZWRJbgoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglieiAqaWYxX2VuZAoKCS8vICppZjFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6OTcKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA1CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA3CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTQKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExOAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE5CgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjUKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMwCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMyCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNAoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzYKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDQKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ5CgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUwCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTEKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NgoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjkKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NAoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzYKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTIKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDMKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAzCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI1CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM4CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQyCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjIKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY0CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY2CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjg3CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTQKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTgKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA4CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEwCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTMKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjAKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMQoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIyCgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMwoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI2CgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMzCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM1CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNwoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDIKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDcKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUzCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTQKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU1CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1OQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzIKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTIKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI2CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMyCgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDcKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcwCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkwCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAwCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDIKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", "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. From d1420153e07d89c10db72ed4874c8bff22def342 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Tue, 29 Oct 2024 17:32:25 -0400 Subject: [PATCH 3/6] rm unnecessary += --- assets/arc-0059/contracts/arc59.algo.ts | 2 +- .../contracts/artifacts/ARC59.approval.teal | 8 +- .../contracts/artifacts/ARC59.arc32.json | 2 +- .../contracts/artifacts/ARC59.src_map.json | 2939 ++++++++--------- .../artifacts/MutableARC59.approval.teal | 8 +- .../artifacts/MutableARC59.arc32.json | 2 +- .../artifacts/MutableARC59.src_map.json | 2447 +++++++------- .../arc-0059/contracts/clients/Arc59Client.ts | 2 +- .../contracts/clients/MutableARC59Client.ts | 2 +- 9 files changed, 2653 insertions(+), 2759 deletions(-) diff --git a/assets/arc-0059/contracts/arc59.algo.ts b/assets/arc-0059/contracts/arc59.algo.ts index c7f00bbb2..47dc1edec 100644 --- a/assets/arc-0059/contracts/arc59.algo.ts +++ b/assets/arc-0059/contracts/arc59.algo.ts @@ -101,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 diff --git a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal index a607cdba3..79eb4e34a 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal @@ -315,22 +315,16 @@ arc59_getSendAssetInfo: // *if2_consequent // contracts/arc59.algo.ts:104 - // info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance + // 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 diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json index 769853d10..5a0c83a86 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json @@ -74,7 +74,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgLSBhbGdvQ29uc3VtZWRCeUNsYWltCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgktCglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTkKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcyCgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzcKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA5CgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI3CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json index dc16cc8b8..269000a3e 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json @@ -1347,146 +1347,146 @@ "teal": 326, "source": 104, "pc": [ - 414, - 415, - 416 + 414 ] }, { "teal": 327, "source": 104, "pc": [ - 417 + 415 ] }, { "teal": 328, "source": 104, "pc": [ - 418, - 419 + 416 ] }, { "teal": 329, "source": 104, "pc": [ - 420, - 421 + 417 ] }, { "teal": 330, "source": 104, "pc": [ - 422, - 423 + 418, + 419 ] }, { - "teal": 331, - "source": 104, + "teal": 336, + "source": 108, "pc": [ - 424 + 420, + 421 ] }, { - "teal": 332, - "source": 104, + "teal": 337, + "source": 108, "pc": [ - 425 + 422 ] }, { - "teal": 333, - "source": 104, + "teal": 338, + "source": 108, "pc": [ - 426 + 423, + 424, + 425 ] }, { - "teal": 334, - "source": 104, + "teal": 343, + "source": 109, "pc": [ + 426, 427 ] }, { - "teal": 335, - "source": 104, + "teal": 344, + "source": 109, "pc": [ - 428 + 428, + 429 ] }, { - "teal": 336, - "source": 104, + "teal": 345, + "source": 109, "pc": [ - 429, - 430 + 430, + 431 ] }, { - "teal": 342, - "source": 108, + "teal": 346, + "source": 109, "pc": [ - 431, - 432 + 432, + 433 ] }, { - "teal": 343, - "source": 108, + "teal": 347, + "source": 109, "pc": [ - 433 + 434, + 435 ] }, { - "teal": 344, - "source": 108, + "teal": 348, + "source": 109, "pc": [ - 434, - 435, - 436 + 436, + 437 ] }, { "teal": 349, "source": 109, "pc": [ - 437, - 438 + 438, + 439 ] }, { "teal": 350, "source": 109, "pc": [ - 439, - 440 + 440, + 441, + 442 ] }, { "teal": 351, "source": 109, "pc": [ - 441, - 442 + 443 ] }, { "teal": 352, "source": 109, "pc": [ - 443, - 444 + 444, + 445 ] }, { "teal": 353, "source": 109, "pc": [ - 445, 446 ] }, @@ -1494,66 +1494,66 @@ "teal": 354, "source": 109, "pc": [ - 447, - 448 + 447 ] }, { "teal": 355, "source": 109, "pc": [ - 449, - 450 + 448 ] }, { "teal": 356, "source": 109, + "pc": [ + 449, + 450 + ] + }, + { + "teal": 360, + "source": 110, "pc": [ 451, - 452, - 453 + 452 ] }, { - "teal": 357, - "source": 109, + "teal": 361, + "source": 110, "pc": [ + 453, 454 ] }, { - "teal": 358, - "source": 109, + "teal": 362, + "source": 110, "pc": [ 455, 456 ] }, { - "teal": 359, - "source": 109, + "teal": 363, + "source": 110, "pc": [ 457 ] }, { - "teal": 360, - "source": 109, - "pc": [ - 458 - ] - }, - { - "teal": 361, - "source": 109, + "teal": 364, + "source": 110, "pc": [ + 458, 459 ] }, { - "teal": 362, - "source": 109, + "teal": 365, + "source": 110, "pc": [ 460, 461 @@ -1572,14 +1572,14 @@ "source": 110, "pc": [ 464, - 465 + 465, + 466 ] }, { "teal": 368, "source": 110, "pc": [ - 466, 467 ] }, @@ -1594,119 +1594,119 @@ "teal": 370, "source": 110, "pc": [ - 469, - 470 + 469 ] }, { "teal": 371, "source": 110, "pc": [ - 471, - 472 + 470 ] }, { "teal": 372, "source": 110, "pc": [ - 473, - 474 + 471 ] }, { "teal": 373, "source": 110, "pc": [ - 475, - 476, - 477 + 472, + 473 ] }, { - "teal": 374, - "source": 110, + "teal": 379, + "source": 113, "pc": [ - 478 + 474, + 475 ] }, { - "teal": 375, - "source": 110, + "teal": 380, + "source": 113, "pc": [ - 479 + 476 ] }, { - "teal": 376, - "source": 110, + "teal": 381, + "source": 113, "pc": [ - 480 + 477 ] }, { - "teal": 377, - "source": 110, + "teal": 382, + "source": 113, "pc": [ - 481 + 478 ] }, { - "teal": 378, - "source": 110, + "teal": 383, + "source": 113, "pc": [ + 479 + ] + }, + { + "teal": 384, + "source": 113, + "pc": [ + 480, + 481, 482 ] }, { - "teal": 379, - "source": 110, + "teal": 389, + "source": 117, "pc": [ 483, 484 ] }, { - "teal": 385, - "source": 113, + "teal": 390, + "source": 117, "pc": [ 485, 486 ] }, { - "teal": 386, - "source": 113, - "pc": [ - 487 - ] - }, - { - "teal": 387, - "source": 113, + "teal": 391, + "source": 117, "pc": [ + 487, 488 ] }, { - "teal": 388, - "source": 113, + "teal": 392, + "source": 117, "pc": [ 489 ] }, { - "teal": 389, - "source": 113, + "teal": 393, + "source": 117, "pc": [ - 490 + 490, + 491 ] }, { - "teal": 390, - "source": 113, + "teal": 394, + "source": 117, "pc": [ - 491, 492, 493 ] @@ -1724,14 +1724,14 @@ "source": 117, "pc": [ 496, - 497 + 497, + 498 ] }, { "teal": 397, "source": 117, "pc": [ - 498, 499 ] }, @@ -1746,238 +1746,238 @@ "teal": 399, "source": 117, "pc": [ - 501, - 502 + 501 ] }, { "teal": 400, "source": 117, "pc": [ - 503, - 504 + 502 ] }, { "teal": 401, "source": 117, "pc": [ - 505, - 506 + 503 ] }, { "teal": 402, "source": 117, "pc": [ - 507, - 508, - 509 + 504, + 505 ] }, { - "teal": 403, - "source": 117, + "teal": 406, + "source": 120, "pc": [ - 510 + 506, + 507 ] }, { - "teal": 404, - "source": 117, + "teal": 407, + "source": 120, "pc": [ - 511 + 508, + 509 ] }, { - "teal": 405, - "source": 117, + "teal": 408, + "source": 120, "pc": [ - 512 + 510 ] }, { - "teal": 406, - "source": 117, + "teal": 409, + "source": 120, "pc": [ - 513 + 511, + 512 ] }, { - "teal": 407, - "source": 117, + "teal": 413, + "source": 121, "pc": [ + 513, 514 ] }, { - "teal": 408, - "source": 117, + "teal": 414, + "source": 121, "pc": [ 515, 516 ] }, { - "teal": 412, - "source": 120, + "teal": 415, + "source": 121, "pc": [ - 517, - 518 + 517 ] }, { - "teal": 413, - "source": 120, + "teal": 419, + "source": 122, "pc": [ - 519, - 520 + 518, + 519 ] }, { - "teal": 414, - "source": 120, + "teal": 420, + "source": 122, "pc": [ + 520, 521 ] }, { - "teal": 415, - "source": 120, + "teal": 421, + "source": 122, "pc": [ - 522, - 523 + 522 ] }, { - "teal": 419, - "source": 121, + "teal": 422, + "source": 122, + "pc": [ + 523, + 524 + ] + }, + { + "teal": 423, + "source": 122, "pc": [ - 524, 525 ] }, { - "teal": 420, - "source": 121, + "teal": 424, + "source": 122, "pc": [ 526, 527 ] }, { - "teal": 421, - "source": 121, + "teal": 428, + "source": 123, "pc": [ - 528 + 528, + 529 ] }, { - "teal": 425, - "source": 122, + "teal": 429, + "source": 123, "pc": [ - 529, 530 ] }, { - "teal": 426, - "source": 122, + "teal": 433, + "source": 126, "pc": [ 531, 532 ] }, { - "teal": 427, - "source": 122, - "pc": [ - 533 - ] - }, - { - "teal": 428, - "source": 122, + "teal": 434, + "source": 126, "pc": [ - 534, - 535 + 533, + 534 ] }, { - "teal": 429, - "source": 122, + "teal": 435, + "source": 126, "pc": [ + 535, 536 ] }, { - "teal": 430, - "source": 122, + "teal": 436, + "source": 126, "pc": [ 537, 538 ] }, { - "teal": 434, - "source": 123, + "teal": 437, + "source": 126, "pc": [ 539, 540 ] }, { - "teal": 435, - "source": 123, + "teal": 438, + "source": 126, "pc": [ - 541 + 541, + 542 ] }, { "teal": 439, "source": 126, "pc": [ - 542, - 543 + 543, + 544 ] }, { "teal": 440, "source": 126, "pc": [ - 544, - 545 + 545, + 546, + 547 ] }, { "teal": 441, "source": 126, "pc": [ - 546, - 547 + 548 ] }, { "teal": 442, "source": 126, "pc": [ - 548, - 549 + 549, + 550 ] }, { "teal": 443, "source": 126, "pc": [ - 550, - 551 + 551, + 552 ] }, { "teal": 444, "source": 126, "pc": [ - 552, 553 ] }, @@ -1993,182 +1993,182 @@ "teal": 446, "source": 126, "pc": [ - 556, - 557, - 558 + 556 ] }, { "teal": 447, "source": 126, "pc": [ - 559 + 557 ] }, { "teal": 448, "source": 126, "pc": [ - 560, - 561 + 558 ] }, { "teal": 449, "source": 126, "pc": [ - 562, - 563 + 559 ] }, { "teal": 450, "source": 126, "pc": [ - 564 + 560, + 561 ] }, { - "teal": 451, - "source": 126, + "teal": 454, + "source": 128, "pc": [ - 565, - 566 + 562, + 563 ] }, { - "teal": 452, - "source": 126, + "teal": 455, + "source": 128, "pc": [ - 567 + 564, + 565, + 566 ] }, { - "teal": 453, - "source": 126, + "teal": 460, + "source": 131, "pc": [ + 567, 568 ] }, { - "teal": 454, - "source": 126, + "teal": 461, + "source": 131, "pc": [ 569 ] }, { - "teal": 455, - "source": 126, + "teal": 462, + "source": 131, "pc": [ 570 ] }, { - "teal": 456, - "source": 126, + "teal": 463, + "source": 131, "pc": [ 571, 572 ] }, { - "teal": 460, - "source": 128, + "teal": 468, + "source": 133, "pc": [ 573, 574 ] }, { - "teal": 461, - "source": 128, + "teal": 469, + "source": 133, "pc": [ 575, - 576, - 577 + 576 ] }, { - "teal": 466, - "source": 131, + "teal": 470, + "source": 133, "pc": [ - 578, - 579 + 577, + 578 ] }, { - "teal": 467, - "source": 131, + "teal": 471, + "source": 133, "pc": [ - 580 + 579 ] }, { - "teal": 468, - "source": 131, + "teal": 472, + "source": 133, "pc": [ - 581 + 580 ] }, { - "teal": 469, - "source": 131, + "teal": 473, + "source": 133, "pc": [ - 582, - 583 + 581 ] }, { "teal": 474, "source": 133, "pc": [ - 584, - 585 + 582, + 583, + 584 ] }, { - "teal": 475, - "source": 133, + "teal": 479, + "source": 135, "pc": [ - 586, - 587 + 585, + 586 ] }, { - "teal": 476, - "source": 133, + "teal": 480, + "source": 135, "pc": [ - 588, - 589 + 587, + 588 ] }, { - "teal": 477, - "source": 133, + "teal": 481, + "source": 135, "pc": [ + 589, 590 ] }, { - "teal": 478, - "source": 133, + "teal": 482, + "source": 135, "pc": [ 591 ] }, { - "teal": 479, - "source": 133, + "teal": 483, + "source": 135, "pc": [ - 592 + 592, + 593 ] }, { - "teal": 480, - "source": 133, + "teal": 484, + "source": 135, "pc": [ - 593, 594, 595 ] @@ -2186,14 +2186,14 @@ "source": 135, "pc": [ 598, - 599 + 599, + 600 ] }, { "teal": 487, "source": 135, "pc": [ - 600, 601 ] }, @@ -2208,158 +2208,158 @@ "teal": 489, "source": 135, "pc": [ - 603, - 604 + 603 ] }, { "teal": 490, "source": 135, "pc": [ - 605, - 606 + 604 ] }, { "teal": 491, "source": 135, "pc": [ - 607, - 608 + 605 ] }, { "teal": 492, "source": 135, "pc": [ - 609, - 610, - 611 + 606, + 607 ] }, { - "teal": 493, - "source": 135, + "teal": 497, + "source": 137, "pc": [ - 612 + 608, + 609 ] }, { - "teal": 494, - "source": 135, + "teal": 498, + "source": 137, "pc": [ - 613 + 610, + 611 ] }, { - "teal": 495, - "source": 135, + "teal": 499, + "source": 137, "pc": [ - 614 + 612 ] }, { - "teal": 496, - "source": 135, + "teal": 500, + "source": 137, "pc": [ - 615 + 613, + 614 ] }, { - "teal": 497, - "source": 135, + "teal": 501, + "source": 137, "pc": [ + 615, 616 ] }, { - "teal": 498, - "source": 135, + "teal": 502, + "source": 137, "pc": [ - 617, - 618 + 617 ] }, { "teal": 503, "source": 137, "pc": [ - 619, - 620 + 618, + 619 ] }, { "teal": 504, "source": 137, "pc": [ - 621, - 622 + 620 ] }, { "teal": 505, "source": 137, "pc": [ - 623 + 621 ] }, { "teal": 506, "source": 137, "pc": [ - 624, - 625 + 622 ] }, { "teal": 507, "source": 137, "pc": [ - 626, - 627 + 623, + 624, + 625 ] }, { - "teal": 508, - "source": 137, + "teal": 512, + "source": 139, "pc": [ - 628 + 626, + 627 ] }, { - "teal": 509, - "source": 137, + "teal": 513, + "source": 139, "pc": [ - 629, - 630 + 628, + 629 ] }, { - "teal": 510, - "source": 137, + "teal": 514, + "source": 139, "pc": [ + 630, 631 ] }, { - "teal": 511, - "source": 137, + "teal": 515, + "source": 139, "pc": [ 632 ] }, { - "teal": 512, - "source": 137, + "teal": 516, + "source": 139, "pc": [ - 633 + 633, + 634 ] }, { - "teal": 513, - "source": 137, + "teal": 517, + "source": 139, "pc": [ - 634, 635, 636 ] @@ -2377,14 +2377,14 @@ "source": 139, "pc": [ 639, - 640 + 640, + 641 ] }, { "teal": 520, "source": 139, "pc": [ - 641, 642 ] }, @@ -2399,115 +2399,115 @@ "teal": 522, "source": 139, "pc": [ - 644, - 645 + 644 ] }, { "teal": 523, "source": 139, "pc": [ - 646, - 647 + 645 ] }, { "teal": 524, "source": 139, "pc": [ - 648, - 649 + 646 ] }, { "teal": 525, "source": 139, "pc": [ - 650, - 651, - 652 + 647, + 648 ] }, { - "teal": 526, - "source": 139, + "teal": 529, + "source": 142, "pc": [ - 653 + 649, + 650 ] }, { - "teal": 527, - "source": 139, + "teal": 530, + "source": 142, "pc": [ - 654 + 651, + 652 ] }, { - "teal": 528, - "source": 139, + "teal": 531, + "source": 142, "pc": [ - 655 + 653, + 654 ] }, { - "teal": 529, - "source": 139, + "teal": 532, + "source": 142, "pc": [ + 655, 656 ] }, { - "teal": 530, - "source": 139, + "teal": 533, + "source": 142, "pc": [ - 657 + 657, + 658 ] }, { - "teal": 531, - "source": 139, + "teal": 534, + "source": 142, "pc": [ - 658, - 659 + 659, + 660 ] }, { "teal": 535, "source": 142, "pc": [ - 660, - 661 + 661, + 662 ] }, { "teal": 536, "source": 142, "pc": [ - 662, - 663 + 663, + 664, + 665 ] }, { "teal": 537, "source": 142, "pc": [ - 664, - 665 + 666 ] }, { "teal": 538, "source": 142, "pc": [ - 666, - 667 + 667, + 668 ] }, { "teal": 539, "source": 142, "pc": [ - 668, 669 ] }, @@ -2515,114 +2515,114 @@ "teal": 540, "source": 142, "pc": [ - 670, - 671 + 670 ] }, { "teal": 541, "source": 142, "pc": [ - 672, - 673 + 671 ] }, { "teal": 542, "source": 142, "pc": [ - 674, - 675, - 676 + 672, + 673 ] }, { - "teal": 543, - "source": 142, + "teal": 550, + "source": 147, "pc": [ - 677 + 674, + 675 ] }, { - "teal": 544, - "source": 142, + "teal": 551, + "source": 147, "pc": [ - 678, - 679 + 676, + 677 ] }, { - "teal": 545, - "source": 142, + "teal": 552, + "source": 147, "pc": [ - 680 + 678 ] }, { - "teal": 546, - "source": 142, + "teal": 553, + "source": 147, "pc": [ - 681 + 679, + 680 ] }, { - "teal": 547, - "source": 142, + "teal": 554, + "source": 147, "pc": [ + 681, 682 ] }, { - "teal": 548, - "source": 142, + "teal": 555, + "source": 147, "pc": [ - 683, - 684 + 683 ] }, { "teal": 556, "source": 147, "pc": [ - 685, - 686 + 684 ] }, { "teal": 557, "source": 147, "pc": [ - 687, - 688 + 685 ] }, { "teal": 558, "source": 147, "pc": [ - 689 + 686, + 687, + 688 ] }, { "teal": 559, "source": 147, "pc": [ - 690, - 691 + 689, + 690 ] }, { "teal": 560, "source": 147, "pc": [ - 692, - 693 + 691, + 692 ] }, { "teal": 561, "source": 147, "pc": [ + 693, 694 ] }, @@ -2630,22 +2630,22 @@ "teal": 562, "source": 147, "pc": [ - 695 + 695, + 696, + 697 ] }, { "teal": 563, "source": 147, "pc": [ - 696 + 698 ] }, { "teal": 564, "source": 147, "pc": [ - 697, - 698, 699 ] }, @@ -2653,77 +2653,77 @@ "teal": 565, "source": 147, "pc": [ - 700, - 701 + 700 ] }, { "teal": 566, "source": 147, "pc": [ - 702, - 703 + 701 ] }, { - "teal": 567, + "teal": 569, "source": 147, "pc": [ - 704, - 705 + 702, + 703, + 704 ] }, { - "teal": 568, - "source": 147, + "teal": 574, + "source": 152, "pc": [ - 706, - 707, - 708 + 705, + 706 ] }, { - "teal": 569, - "source": 147, + "teal": 575, + "source": 152, "pc": [ - 709 + 707, + 708 ] }, { - "teal": 570, - "source": 147, + "teal": 576, + "source": 152, "pc": [ + 709, 710 ] }, { - "teal": 571, - "source": 147, - "pc": [ - 711 - ] - }, - { - "teal": 572, - "source": 147, + "teal": 577, + "source": 152, "pc": [ + 711, 712 ] }, { - "teal": 575, - "source": 147, + "teal": 578, + "source": 152, "pc": [ 713, 714, 715 ] }, + { + "teal": 579, + "source": 152, + "pc": [ + 716 + ] + }, { "teal": 580, "source": 152, "pc": [ - 716, 717 ] }, @@ -2731,88 +2731,94 @@ "teal": 581, "source": 152, "pc": [ - 718, - 719 + 718 ] }, { "teal": 582, "source": 152, "pc": [ - 720, - 721 + 719, + 720 ] }, { "teal": 583, "source": 152, "pc": [ - 722, - 723 + 721 ] }, { "teal": 584, "source": 152, "pc": [ - 724, - 725, - 726 + 722 ] }, { "teal": 585, "source": 152, "pc": [ - 727 + 723, + 724 ] }, { - "teal": 586, - "source": 152, + "teal": 589, + "source": 153, + "pc": [ + 725, + 726 + ] + }, + { + "teal": 590, + "source": 153, "pc": [ + 727, 728 ] }, { - "teal": 587, - "source": 152, + "teal": 591, + "source": 153, "pc": [ 729 ] }, { - "teal": 588, - "source": 152, + "teal": 592, + "source": 153, "pc": [ 730, 731 ] }, { - "teal": 589, - "source": 152, + "teal": 593, + "source": 153, "pc": [ - 732 + 732, + 733 ] }, { - "teal": 590, - "source": 152, + "teal": 594, + "source": 153, "pc": [ - 733 + 734 ] }, { - "teal": 591, - "source": 152, + "teal": 595, + "source": 153, "pc": [ - 734, 735 ] }, { - "teal": 595, + "teal": 596, "source": 153, "pc": [ 736, @@ -2820,78 +2826,72 @@ ] }, { - "teal": 596, + "teal": 597, "source": 153, "pc": [ - 738, - 739 + 738 ] }, { - "teal": 597, + "teal": 598, "source": 153, "pc": [ + 739, 740 ] }, { - "teal": 598, - "source": 153, + "teal": 603, + "source": 154, "pc": [ 741, 742 ] }, { - "teal": 599, - "source": 153, + "teal": 604, + "source": 154, "pc": [ 743, 744 ] }, { - "teal": 600, - "source": 153, - "pc": [ - 745 - ] - }, - { - "teal": 601, - "source": 153, + "teal": 605, + "source": 154, "pc": [ + 745, 746 ] }, { - "teal": 602, - "source": 153, + "teal": 606, + "source": 154, "pc": [ 747, 748 ] }, { - "teal": 603, - "source": 153, + "teal": 607, + "source": 154, "pc": [ - 749 + 749, + 750, + 751 ] }, { - "teal": 604, - "source": 153, + "teal": 608, + "source": 154, "pc": [ - 750, - 751 + 752 ] }, { "teal": 609, "source": 154, "pc": [ - 752, 753 ] }, @@ -2900,94 +2900,94 @@ "source": 154, "pc": [ 754, - 755 + 755, + 756 ] }, { - "teal": 611, - "source": 154, + "teal": 615, + "source": 155, "pc": [ - 756, - 757 + 757, + 758 ] }, { - "teal": 612, - "source": 154, + "teal": 616, + "source": 155, "pc": [ - 758, - 759 + 759, + 760 ] }, { - "teal": 613, - "source": 154, + "teal": 617, + "source": 155, "pc": [ - 760, 761, 762 ] }, { - "teal": 614, - "source": 154, + "teal": 618, + "source": 155, "pc": [ - 763 + 763, + 764 ] }, { - "teal": 615, - "source": 154, + "teal": 619, + "source": 155, "pc": [ - 764 + 765, + 766 ] }, { - "teal": 616, - "source": 154, + "teal": 620, + "source": 155, "pc": [ - 765, - 766, - 767 + 767, + 768 ] }, { "teal": 621, "source": 155, "pc": [ - 768, - 769 + 769, + 770 ] }, { "teal": 622, "source": 155, "pc": [ - 770, - 771 + 771, + 772, + 773 ] }, { "teal": 623, "source": 155, "pc": [ - 772, - 773 + 774 ] }, { "teal": 624, "source": 155, "pc": [ - 774, - 775 + 775, + 776 ] }, { "teal": 625, "source": 155, "pc": [ - 776, 777 ] }, @@ -2995,2744 +2995,2697 @@ "teal": 626, "source": 155, "pc": [ - 778, - 779 + 778 ] }, { "teal": 627, "source": 155, "pc": [ - 780, - 781 + 779 ] }, { "teal": 628, "source": 155, + "pc": [ + 780, + 781 + ] + }, + { + "teal": 635, + "source": 159, "pc": [ 782, - 783, - 784 + 783 ] }, { - "teal": 629, - "source": 155, + "teal": 639, + "source": 86, "pc": [ + 784, 785 ] }, { - "teal": 630, - "source": 155, + "teal": 642, + "source": 86, "pc": [ 786, 787 ] }, { - "teal": 631, - "source": 155, + "teal": 643, + "source": 86, "pc": [ 788 ] }, { - "teal": 632, - "source": 155, + "teal": 648, + "source": 171, "pc": [ 789 ] }, { - "teal": 633, - "source": 155, - "pc": [ - 790 - ] - }, - { - "teal": 634, - "source": 155, + "teal": 651, + "source": 171, "pc": [ + 790, 791, 792 ] }, { - "teal": 641, - "source": 159, + "teal": 652, + "source": 171, "pc": [ - 793, - 794 + 793 ] }, { - "teal": 645, - "source": 86, + "teal": 655, + "source": 171, "pc": [ + 794, 795, 796 ] }, { - "teal": 648, - "source": 86, - "pc": [ - 797, - 798 - ] - }, - { - "teal": 649, - "source": 86, - "pc": [ - 799 - ] - }, - { - "teal": 654, + "teal": 656, "source": 171, "pc": [ - 800 + 797 ] }, { "teal": 657, "source": 171, "pc": [ - 801, - 802, - 803 + 798 ] }, { "teal": 658, "source": 171, "pc": [ - 804 + 799 ] }, { - "teal": 661, + "teal": 659, "source": 171, "pc": [ - 805, - 806, - 807 + 800 ] }, { - "teal": 662, + "teal": 660, "source": 171, "pc": [ - 808 + 801 ] }, { "teal": 663, "source": 171, "pc": [ - 809 + 802, + 803 ] }, { "teal": 664, "source": 171, "pc": [ - 810 + 804 ] }, { "teal": 665, "source": 171, "pc": [ - 811 + 805 ] }, { "teal": 666, "source": 171, "pc": [ - 812 + 806 ] }, { - "teal": 669, + "teal": 667, "source": 171, "pc": [ - 813, - 814 + 807, + 808 ] }, { - "teal": 670, + "teal": 668, "source": 171, "pc": [ - 815 + 809 ] }, { - "teal": 671, + "teal": 669, "source": 171, "pc": [ - 816 + 810 ] }, { - "teal": 672, + "teal": 670, "source": 171, "pc": [ - 817 + 811 ] }, { "teal": 673, "source": 171, "pc": [ - 818, - 819 + 812, + 813, + 814 ] }, { "teal": 674, "source": 171, "pc": [ - 820 + 815 ] }, { "teal": 675, "source": 171, "pc": [ - 821 + 816 ] }, { "teal": 676, "source": 171, "pc": [ - 822 - ] - }, - { - "teal": 679, - "source": 171, - "pc": [ - 823, - 824, - 825 - ] - }, - { - "teal": 680, - "source": 171, - "pc": [ - 826 - ] - }, - { - "teal": 681, - "source": 171, - "pc": [ - 827 - ] - }, - { - "teal": 682, - "source": 171, - "pc": [ - 828 + 817 ] }, { - "teal": 683, + "teal": 677, "source": 171, "pc": [ - 829 + 818 ] }, { - "teal": 695, + "teal": 689, "source": 171, "pc": [ - 830, - 831, - 832 + 819, + 820, + 821 ] }, { - "teal": 698, + "teal": 692, "source": 171, "pc": [ - 833 + 822 ] }, { - "teal": 699, + "teal": 693, "source": 171, "pc": [ - 834, - 835 + 823, + 824 ] }, { - "teal": 706, + "teal": 700, "source": 172, "pc": [ - 836, - 837 + 825, + 826 ] }, { - "teal": 707, + "teal": 701, "source": 173, "pc": [ - 838, - 839 + 827, + 828 ] }, { - "teal": 708, + "teal": 702, "source": 173, "pc": [ - 840, - 841 + 829, + 830 ] }, { - "teal": 709, + "teal": 703, "source": 173, "pc": [ - 842 + 831 ] }, { - "teal": 710, + "teal": 704, "source": 173, "pc": [ - 843 + 832 ] }, { - "teal": 715, + "teal": 709, "source": 177, "pc": [ - 844, - 845 + 833, + 834 ] }, { - "teal": 716, + "teal": 710, "source": 177, "pc": [ - 846, - 847 + 835, + 836 ] }, { - "teal": 717, + "teal": 711, "source": 177, "pc": [ - 848, - 849 + 837, + 838 ] }, { - "teal": 718, + "teal": 712, "source": 177, "pc": [ - 850, - 851 + 839, + 840 ] }, { - "teal": 719, + "teal": 713, "source": 177, "pc": [ - 852 + 841 ] }, { - "teal": 720, + "teal": 714, "source": 177, "pc": [ - 853 + 842 ] }, { - "teal": 721, + "teal": 715, "source": 177, "pc": [ - 854, - 855, - 856 + 843, + 844, + 845 ] }, { - "teal": 730, + "teal": 724, "source": 178, "pc": [ - 857 + 846 ] }, { - "teal": 731, + "teal": 725, "source": 178, "pc": [ - 858 + 847 ] }, { - "teal": 732, + "teal": 726, "source": 178, "pc": [ - 859, - 860 + 848, + 849 ] }, { - "teal": 736, + "teal": 730, "source": 179, "pc": [ - 861, - 862 + 850, + 851 ] }, { - "teal": 737, + "teal": 731, "source": 179, "pc": [ - 863, - 864 + 852, + 853 ] }, { - "teal": 741, + "teal": 735, "source": 180, "pc": [ - 865, - 866 + 854, + 855 ] }, { - "teal": 742, + "teal": 736, "source": 180, "pc": [ - 867, - 868 + 856, + 857 ] }, { - "teal": 743, + "teal": 737, "source": 180, "pc": [ - 869, - 870 + 858, + 859 ] }, { - "teal": 747, + "teal": 741, "source": 181, "pc": [ - 871, - 872 + 860, + 861 ] }, { - "teal": 748, + "teal": 742, "source": 181, "pc": [ - 873, - 874 + 862, + 863 ] }, { - "teal": 749, + "teal": 743, "source": 181, "pc": [ - 875, - 876 + 864, + 865 ] }, { - "teal": 752, + "teal": 746, "source": 178, "pc": [ - 877 + 866 ] }, { - "teal": 753, + "teal": 747, "source": 178, "pc": [ - 878, - 879 + 867, + 868 ] }, { - "teal": 756, + "teal": 750, "source": 178, "pc": [ - 880 + 869 ] }, { - "teal": 761, + "teal": 755, "source": 184, "pc": [ - 881, - 882 + 870, + 871 ] }, { - "teal": 762, + "teal": 756, "source": 184, "pc": [ - 883 + 872 ] }, { - "teal": 763, + "teal": 757, "source": 184, "pc": [ - 884 + 873 ] }, { - "teal": 764, + "teal": 758, "source": 184, "pc": [ - 885, - 886, - 887 + 874, + 875, + 876 ] }, { - "teal": 772, + "teal": 766, "source": 185, "pc": [ - 888 + 877 ] }, { - "teal": 773, + "teal": 767, "source": 185, "pc": [ - 889 + 878 ] }, { - "teal": 774, + "teal": 768, "source": 185, "pc": [ - 890, - 891 + 879, + 880 ] }, { - "teal": 778, + "teal": 772, "source": 186, "pc": [ - 892, - 893 + 881, + 882 ] }, { - "teal": 779, + "teal": 773, "source": 186, "pc": [ - 894, - 895 + 883, + 884 ] }, { - "teal": 783, + "teal": 777, "source": 187, "pc": [ - 896, - 897 + 885, + 886 ] }, { - "teal": 784, + "teal": 778, "source": 187, "pc": [ - 898, - 899 + 887, + 888 ] }, { - "teal": 787, + "teal": 781, "source": 185, "pc": [ - 900 + 889 ] }, { - "teal": 788, + "teal": 782, "source": 185, "pc": [ - 901, - 902 + 890, + 891 ] }, { - "teal": 791, + "teal": 785, "source": 185, "pc": [ - 903 + 892 ] }, { - "teal": 796, + "teal": 790, "source": 191, "pc": [ - 904, - 905 + 893, + 894 ] }, { - "teal": 797, + "teal": 791, "source": 191, "pc": [ - 906, - 907, - 908 + 895, + 896, + 897 ] }, { - "teal": 802, + "teal": 796, "source": 194, "pc": [ - 909, - 910 + 898, + 899 ] }, { - "teal": 803, + "teal": 797, "source": 194, "pc": [ - 911 + 900 ] }, { - "teal": 804, + "teal": 798, "source": 194, "pc": [ - 912 + 901 ] }, { - "teal": 805, + "teal": 799, "source": 194, "pc": [ - 913 + 902 ] }, { - "teal": 806, + "teal": 800, "source": 194, "pc": [ - 914, - 915 + 903, + 904 ] }, { - "teal": 810, + "teal": 804, "source": 195, "pc": [ - 916, - 917 + 905, + 906 ] }, { - "teal": 811, + "teal": 805, "source": 195, "pc": [ - 918, - 919, - 920 + 907, + 908, + 909 ] }, { - "teal": 812, + "teal": 806, "source": 195, "pc": [ - 921, - 922 + 910, + 911 ] }, { - "teal": 817, + "teal": 811, "source": 197, "pc": [ - 923, - 924 + 912, + 913 ] }, { - "teal": 818, + "teal": 812, "source": 197, "pc": [ - 925 + 914 ] }, { - "teal": 819, + "teal": 813, "source": 197, "pc": [ - 926 + 915 ] }, { - "teal": 820, + "teal": 814, "source": 197, "pc": [ - 927, - 928, - 929 + 916, + 917, + 918 ] }, { - "teal": 828, + "teal": 822, "source": 198, "pc": [ - 930 + 919 ] }, { - "teal": 829, + "teal": 823, "source": 198, "pc": [ - 931 + 920 ] }, { - "teal": 830, + "teal": 824, "source": 198, "pc": [ - 932, - 933 + 921, + 922 ] }, { - "teal": 834, + "teal": 828, "source": 199, "pc": [ - 934, - 935 + 923, + 924 ] }, { - "teal": 835, + "teal": 829, "source": 199, "pc": [ - 936, - 937 + 925, + 926 ] }, { - "teal": 839, + "teal": 833, "source": 200, "pc": [ - 938, - 939 + 927, + 928 ] }, { - "teal": 840, + "teal": 834, "source": 200, "pc": [ - 940, - 941 + 929, + 930 ] }, { - "teal": 843, + "teal": 837, "source": 198, "pc": [ - 942 + 931 ] }, { - "teal": 844, + "teal": 838, "source": 198, "pc": [ - 943, - 944 + 932, + 933 ] }, { - "teal": 847, + "teal": 841, "source": 198, "pc": [ - 945 + 934 ] }, { - "teal": 853, + "teal": 847, "source": 204, "pc": [ - 946, - 947 + 935, + 936 ] }, { - "teal": 854, + "teal": 848, "source": 204, "pc": [ - 948, - 949 + 937, + 938 ] }, { - "teal": 855, + "teal": 849, "source": 204, "pc": [ - 950, - 951 + 939, + 940 ] }, { - "teal": 856, + "teal": 850, "source": 204, "pc": [ - 952, - 953 + 941, + 942 ] }, { - "teal": 857, + "teal": 851, "source": 204, "pc": [ - 954 + 943 ] }, { - "teal": 858, + "teal": 852, "source": 204, "pc": [ - 955 + 944 ] }, { - "teal": 859, + "teal": 853, "source": 204, "pc": [ - 956 + 945 ] }, { - "teal": 860, + "teal": 854, "source": 204, "pc": [ - 957, - 958, - 959 + 946, + 947, + 948 ] }, { - "teal": 865, + "teal": 859, "source": 205, "pc": [ - 960, - 961 + 949, + 950 ] }, { - "teal": 866, + "teal": 860, "source": 205, "pc": [ - 962, - 963 + 951, + 952 ] }, { - "teal": 871, + "teal": 865, "source": 206, "pc": [ - 964, - 965 + 953, + 954 ] }, { - "teal": 872, + "teal": 866, "source": 206, "pc": [ - 966 + 955 ] }, { - "teal": 873, + "teal": 867, "source": 206, "pc": [ - 967, - 968, - 969 + 956, + 957, + 958 ] }, { - "teal": 878, + "teal": 872, "source": 206, "pc": [ - 970, - 971 + 959, + 960 ] }, { - "teal": 879, + "teal": 873, "source": 206, "pc": [ - 972, - 973 + 961, + 962 ] }, { - "teal": 880, + "teal": 874, "source": 206, "pc": [ - 974 + 963 ] }, { - "teal": 881, + "teal": 875, "source": 206, "pc": [ - 975, - 976 + 964, + 965 ] }, { - "teal": 887, + "teal": 881, "source": 209, "pc": [ - 977, - 978 + 966, + 967 ] }, { - "teal": 888, + "teal": 882, "source": 209, "pc": [ - 979, - 980 + 968, + 969 ] }, { - "teal": 889, + "teal": 883, "source": 209, "pc": [ - 981 + 970 ] }, { - "teal": 890, + "teal": 884, "source": 209, "pc": [ - 982, - 983 + 971, + 972 ] }, { - "teal": 891, + "teal": 885, "source": 209, "pc": [ - 984, - 985 + 973, + 974 ] }, { - "teal": 892, + "teal": 886, "source": 209, "pc": [ - 986 + 975 ] }, { - "teal": 893, + "teal": 887, "source": 209, "pc": [ - 987, - 988 + 976, + 977 ] }, { - "teal": 894, + "teal": 888, "source": 209, "pc": [ - 989 + 978 ] }, { - "teal": 895, + "teal": 889, "source": 209, "pc": [ - 990 + 979 ] }, { - "teal": 896, + "teal": 890, "source": 209, "pc": [ - 991, - 992, - 993 + 980, + 981, + 982 ] }, { - "teal": 904, + "teal": 898, "source": 210, "pc": [ - 994 + 983 ] }, { - "teal": 905, + "teal": 899, "source": 210, "pc": [ - 995 + 984 ] }, { - "teal": 906, + "teal": 900, "source": 210, "pc": [ - 996, - 997 + 985, + 986 ] }, { - "teal": 910, + "teal": 904, "source": 211, "pc": [ - 998, - 999 + 987, + 988 ] }, { - "teal": 911, + "teal": 905, "source": 211, "pc": [ - 1000, - 1001 + 989, + 990 ] }, { - "teal": 915, + "teal": 909, "source": 212, "pc": [ - 1002, - 1003 + 991, + 992 ] }, { - "teal": 916, + "teal": 910, "source": 212, "pc": [ - 1004, - 1005 + 993, + 994 ] }, { - "teal": 919, + "teal": 913, "source": 210, "pc": [ - 1006 + 995 ] }, { - "teal": 920, + "teal": 914, "source": 210, "pc": [ - 1007, - 1008 + 996, + 997 ] }, { - "teal": 923, + "teal": 917, "source": 210, "pc": [ - 1009 + 998 ] }, { - "teal": 933, + "teal": 927, "source": 217, "pc": [ - 1010 + 999 ] }, { - "teal": 934, + "teal": 928, "source": 217, "pc": [ - 1011 + 1000 ] }, { - "teal": 935, + "teal": 929, "source": 217, "pc": [ - 1012, - 1013 + 1001, + 1002 ] }, { - "teal": 939, + "teal": 933, "source": 218, "pc": [ - 1014, - 1015 + 1003, + 1004 ] }, { - "teal": 940, + "teal": 934, "source": 218, "pc": [ - 1016, - 1017 + 1005, + 1006 ] }, { - "teal": 944, + "teal": 938, "source": 219, "pc": [ - 1018, - 1019 + 1007, + 1008 ] }, { - "teal": 945, + "teal": 939, "source": 219, "pc": [ - 1020, - 1021 + 1009, + 1010 ] }, { - "teal": 949, + "teal": 943, "source": 220, "pc": [ - 1022 + 1011 ] }, { - "teal": 950, + "teal": 944, "source": 220, "pc": [ - 1023, - 1024 + 1012, + 1013 ] }, { - "teal": 954, + "teal": 948, "source": 221, "pc": [ - 1025, - 1026 + 1014, + 1015 ] }, { - "teal": 955, + "teal": 949, "source": 221, "pc": [ - 1027, - 1028 + 1016, + 1017 ] }, { - "teal": 956, + "teal": 950, "source": 221, "pc": [ - 1029, - 1030 + 1018, + 1019 ] }, { - "teal": 959, + "teal": 953, "source": 217, "pc": [ - 1031 + 1020 ] }, { - "teal": 960, + "teal": 954, "source": 217, "pc": [ - 1032, - 1033 + 1021, + 1022 ] }, { - "teal": 963, + "teal": 957, "source": 217, "pc": [ - 1034 + 1023 ] }, { - "teal": 972, + "teal": 966, "source": 226, "pc": [ - 1035 + 1024 ] }, { - "teal": 973, + "teal": 967, "source": 226, "pc": [ - 1036 + 1025 ] }, { - "teal": 974, + "teal": 968, "source": 226, "pc": [ - 1037, - 1038 + 1026, + 1027 ] }, { - "teal": 978, + "teal": 972, "source": 227, "pc": [ - 1039, - 1040 + 1028, + 1029 ] }, { - "teal": 979, + "teal": 973, "source": 227, "pc": [ - 1041, - 1042 + 1030, + 1031 ] }, { - "teal": 983, + "teal": 977, "source": 228, "pc": [ - 1043, - 1044 + 1032, + 1033 ] }, { - "teal": 984, + "teal": 978, "source": 228, "pc": [ - 1045, - 1046 + 1034, + 1035 ] }, { - "teal": 985, + "teal": 979, "source": 228, "pc": [ - 1047, - 1048 + 1036, + 1037 ] }, { - "teal": 989, + "teal": 983, "source": 229, "pc": [ - 1049, - 1050 + 1038, + 1039 ] }, { - "teal": 990, + "teal": 984, "source": 229, "pc": [ - 1051, - 1052 + 1040, + 1041 ] }, { - "teal": 991, + "teal": 985, "source": 229, "pc": [ - 1053, - 1054 + 1042, + 1043 ] }, { - "teal": 994, + "teal": 988, "source": 226, "pc": [ - 1055 + 1044 ] }, { - "teal": 995, + "teal": 989, "source": 226, "pc": [ - 1056, - 1057 + 1045, + 1046 ] }, { - "teal": 998, + "teal": 992, "source": 226, "pc": [ - 1058 + 1047 ] }, { - "teal": 1002, + "teal": 996, "source": 232, "pc": [ - 1059, - 1060 + 1048, + 1049 ] }, { - "teal": 1006, + "teal": 1000, "source": 171, "pc": [ - 1061, - 1062 + 1050, + 1051 ] }, { - "teal": 1009, + "teal": 1003, "source": 171, "pc": [ - 1063, - 1064 + 1052, + 1053 ] }, { - "teal": 1010, + "teal": 1004, "source": 171, "pc": [ - 1065 + 1054 ] }, { - "teal": 1015, + "teal": 1009, "source": 240, "pc": [ - 1066, - 1067, - 1068 + 1055, + 1056, + 1057 ] }, { - "teal": 1016, + "teal": 1010, "source": 240, "pc": [ - 1069 + 1058 ] }, { - "teal": 1019, + "teal": 1013, "source": 240, "pc": [ - 1070, - 1071, - 1072 + 1059, + 1060, + 1061 ] }, { - "teal": 1020, + "teal": 1014, "source": 240, "pc": [ - 1073 + 1062 ] }, { - "teal": 1021, + "teal": 1015, "source": 240, "pc": [ - 1074 + 1063 ] }, { - "teal": 1029, + "teal": 1023, "source": 240, "pc": [ - 1075, - 1076, - 1077 + 1064, + 1065, + 1066 ] }, { - "teal": 1032, + "teal": 1026, "source": 240, "pc": [ - 1078 + 1067 ] }, { - "teal": 1036, + "teal": 1030, "source": 241, "pc": [ - 1079, - 1080 + 1068, + 1069 ] }, { - "teal": 1037, + "teal": 1031, "source": 241, "pc": [ - 1081 + 1070 ] }, { - "teal": 1038, + "teal": 1032, "source": 241, "pc": [ - 1082 + 1071 ] }, { - "teal": 1039, + "teal": 1033, "source": 241, "pc": [ - 1083, - 1084 + 1072, + 1073 ] }, { - "teal": 1049, + "teal": 1043, "source": 243, "pc": [ - 1085 + 1074 ] }, { - "teal": 1050, + "teal": 1044, "source": 243, "pc": [ - 1086 + 1075 ] }, { - "teal": 1051, + "teal": 1045, "source": 243, "pc": [ - 1087, - 1088 + 1076, + 1077 ] }, { - "teal": 1055, + "teal": 1049, "source": 244, "pc": [ - 1089, - 1090 + 1078, + 1079 ] }, { - "teal": 1056, + "teal": 1050, "source": 244, "pc": [ - 1091, - 1092 + 1080, + 1081 ] }, { - "teal": 1060, + "teal": 1054, "source": 245, "pc": [ - 1093, - 1094 + 1082, + 1083 ] }, { - "teal": 1061, + "teal": 1055, "source": 245, "pc": [ - 1095, - 1096 + 1084, + 1085 ] }, { - "teal": 1065, + "teal": 1059, "source": 246, "pc": [ - 1097, - 1098 + 1086, + 1087 ] }, { - "teal": 1066, + "teal": 1060, "source": 246, "pc": [ - 1099, - 1100 + 1088, + 1089 ] }, { - "teal": 1067, + "teal": 1061, "source": 246, "pc": [ - 1101, - 1102 + 1090, + 1091 ] }, { - "teal": 1068, + "teal": 1062, "source": 246, "pc": [ - 1103 + 1092 ] }, { - "teal": 1069, + "teal": 1063, "source": 246, "pc": [ - 1104, - 1105 + 1093, + 1094 ] }, { - "teal": 1073, + "teal": 1067, "source": 247, "pc": [ - 1106, - 1107 + 1095, + 1096 ] }, { - "teal": 1074, + "teal": 1068, "source": 247, "pc": [ - 1108, - 1109 + 1097, + 1098 ] }, { - "teal": 1078, + "teal": 1072, "source": 248, "pc": [ - 1110, - 1111 + 1099, + 1100 ] }, { - "teal": 1079, + "teal": 1073, "source": 248, "pc": [ - 1112, - 1113 + 1101, + 1102 ] }, { - "teal": 1082, + "teal": 1076, "source": 243, "pc": [ - 1114 + 1103 ] }, { - "teal": 1083, + "teal": 1077, "source": 243, "pc": [ - 1115, - 1116 + 1104, + 1105 ] }, { - "teal": 1086, + "teal": 1080, "source": 243, "pc": [ - 1117 + 1106 ] }, { - "teal": 1094, + "teal": 1088, "source": 251, "pc": [ - 1118 + 1107 ] }, { - "teal": 1095, + "teal": 1089, "source": 251, "pc": [ - 1119 + 1108 ] }, { - "teal": 1096, + "teal": 1090, "source": 251, "pc": [ - 1120, - 1121 + 1109, + 1110 ] }, { - "teal": 1100, + "teal": 1094, "source": 252, "pc": [ - 1122, - 1123 + 1111, + 1112 ] }, { - "teal": 1101, + "teal": 1095, "source": 252, "pc": [ - 1124, - 1125 + 1113, + 1114 ] }, { - "teal": 1105, + "teal": 1099, "source": 253, "pc": [ - 1126, - 1127 + 1115, + 1116 ] }, { - "teal": 1106, + "teal": 1100, "source": 253, "pc": [ - 1128, - 1129 + 1117, + 1118 ] }, { - "teal": 1110, + "teal": 1104, "source": 254, "pc": [ - 1130, - 1131 + 1119, + 1120 ] }, { - "teal": 1111, + "teal": 1105, "source": 254, "pc": [ - 1132, - 1133 + 1121, + 1122 ] }, { - "teal": 1112, + "teal": 1106, "source": 254, "pc": [ - 1134 + 1123 ] }, { - "teal": 1113, + "teal": 1107, "source": 254, "pc": [ - 1135, - 1136 + 1124, + 1125 ] }, { - "teal": 1114, + "teal": 1108, "source": 254, "pc": [ - 1137, - 1138 + 1126, + 1127 ] }, { - "teal": 1115, + "teal": 1109, "source": 254, "pc": [ - 1139 + 1128 ] }, { - "teal": 1116, + "teal": 1110, "source": 254, "pc": [ - 1140 + 1129 ] }, { - "teal": 1117, + "teal": 1111, "source": 254, "pc": [ - 1141, - 1142 + 1130, + 1131 ] }, { - "teal": 1120, + "teal": 1114, "source": 251, "pc": [ - 1143 + 1132 ] }, { - "teal": 1121, + "teal": 1115, "source": 251, "pc": [ - 1144, - 1145 + 1133, + 1134 ] }, { - "teal": 1124, + "teal": 1118, "source": 251, "pc": [ - 1146 + 1135 ] }, { - "teal": 1125, + "teal": 1119, "source": 240, "pc": [ - 1147 + 1136 ] }, { - "teal": 1130, + "teal": 1124, "source": 264, "pc": [ - 1148, - 1149, - 1150 + 1137, + 1138, + 1139 ] }, { - "teal": 1131, + "teal": 1125, "source": 264, "pc": [ - 1151 + 1140 ] }, { - "teal": 1134, + "teal": 1128, "source": 264, "pc": [ - 1152, - 1153, - 1154 + 1141, + 1142, + 1143 ] }, { - "teal": 1135, + "teal": 1129, "source": 264, "pc": [ - 1155 + 1144 ] }, { - "teal": 1136, + "teal": 1130, "source": 264, "pc": [ - 1156 + 1145 ] }, { - "teal": 1145, + "teal": 1139, "source": 264, "pc": [ - 1157, - 1158, - 1159 + 1146, + 1147, + 1148 ] }, { - "teal": 1148, + "teal": 1142, "source": 264, "pc": [ - 1160 + 1149 ] }, { - "teal": 1152, + "teal": 1146, "source": 265, "pc": [ - 1161, - 1162 + 1150, + 1151 ] }, { - "teal": 1153, + "teal": 1147, "source": 265, "pc": [ - 1163 + 1152 ] }, { - "teal": 1154, + "teal": 1148, "source": 265, "pc": [ - 1164 + 1153 ] }, { - "teal": 1155, + "teal": 1149, "source": 265, "pc": [ - 1165, - 1166 + 1154, + 1155 ] }, { - "teal": 1165, + "teal": 1159, "source": 267, "pc": [ - 1167 + 1156 ] }, { - "teal": 1166, + "teal": 1160, "source": 267, "pc": [ - 1168 + 1157 ] }, { - "teal": 1167, + "teal": 1161, "source": 267, "pc": [ - 1169, - 1170 + 1158, + 1159 ] }, { - "teal": 1171, + "teal": 1165, "source": 268, "pc": [ - 1171, - 1172 + 1160, + 1161 ] }, { - "teal": 1172, + "teal": 1166, "source": 268, "pc": [ - 1173, - 1174 + 1162, + 1163 ] }, { - "teal": 1176, + "teal": 1170, "source": 269, "pc": [ - 1175, - 1176 + 1164, + 1165 ] }, { - "teal": 1177, + "teal": 1171, "source": 269, "pc": [ - 1177, - 1178 + 1166, + 1167 ] }, { - "teal": 1178, + "teal": 1172, "source": 269, "pc": [ - 1179 + 1168 ] }, { - "teal": 1179, + "teal": 1173, "source": 269, "pc": [ - 1180, - 1181 + 1169, + 1170 ] }, { - "teal": 1183, + "teal": 1177, "source": 270, "pc": [ - 1182, - 1183 + 1171, + 1172 ] }, { - "teal": 1184, + "teal": 1178, "source": 270, "pc": [ - 1184, - 1185 + 1173, + 1174 ] }, { - "teal": 1185, + "teal": 1179, "source": 270, "pc": [ - 1186, - 1187 + 1175, + 1176 ] }, { - "teal": 1186, + "teal": 1180, "source": 270, "pc": [ - 1188 + 1177 ] }, { - "teal": 1187, + "teal": 1181, "source": 270, "pc": [ - 1189, - 1190 + 1178, + 1179 ] }, { - "teal": 1191, + "teal": 1185, "source": 271, "pc": [ - 1191, - 1192 + 1180, + 1181 ] }, { - "teal": 1192, + "teal": 1186, "source": 271, "pc": [ - 1193, - 1194 + 1182, + 1183 ] }, { - "teal": 1196, + "teal": 1190, "source": 272, "pc": [ - 1195, - 1196 + 1184, + 1185 ] }, { - "teal": 1197, + "teal": 1191, "source": 272, "pc": [ - 1197, - 1198 + 1186, + 1187 ] }, { - "teal": 1198, + "teal": 1192, "source": 272, "pc": [ - 1199 + 1188 ] }, { - "teal": 1199, + "teal": 1193, "source": 272, "pc": [ - 1200, - 1201 + 1189, + 1190 ] }, { - "teal": 1202, + "teal": 1196, "source": 267, "pc": [ - 1202 + 1191 ] }, { - "teal": 1203, + "teal": 1197, "source": 267, "pc": [ - 1203, - 1204 + 1192, + 1193 ] }, { - "teal": 1206, + "teal": 1200, "source": 267, "pc": [ - 1205 + 1194 ] }, { - "teal": 1214, + "teal": 1208, "source": 275, "pc": [ - 1206 + 1195 ] }, { - "teal": 1215, + "teal": 1209, "source": 275, "pc": [ - 1207 + 1196 ] }, { - "teal": 1216, + "teal": 1210, "source": 275, "pc": [ - 1208, - 1209 + 1197, + 1198 ] }, { - "teal": 1220, + "teal": 1214, "source": 276, "pc": [ - 1210, - 1211 + 1199, + 1200 ] }, { - "teal": 1221, + "teal": 1215, "source": 276, "pc": [ - 1212, - 1213 + 1201, + 1202 ] }, { - "teal": 1225, + "teal": 1219, "source": 277, "pc": [ - 1214, - 1215 + 1203, + 1204 ] }, { - "teal": 1226, + "teal": 1220, "source": 277, "pc": [ - 1216, - 1217 + 1205, + 1206 ] }, { - "teal": 1230, + "teal": 1224, "source": 278, "pc": [ - 1218, - 1219 + 1207, + 1208 ] }, { - "teal": 1231, + "teal": 1225, "source": 278, "pc": [ - 1220, - 1221 + 1209, + 1210 ] }, { - "teal": 1232, + "teal": 1226, "source": 278, "pc": [ - 1222 + 1211 ] }, { - "teal": 1233, + "teal": 1227, "source": 278, "pc": [ - 1223, - 1224 + 1212, + 1213 ] }, { - "teal": 1234, + "teal": 1228, "source": 278, "pc": [ - 1225, - 1226 + 1214, + 1215 ] }, { - "teal": 1235, + "teal": 1229, "source": 278, "pc": [ - 1227 + 1216 ] }, { - "teal": 1236, + "teal": 1230, "source": 278, "pc": [ - 1228 + 1217 ] }, { - "teal": 1237, + "teal": 1231, "source": 278, "pc": [ - 1229, - 1230 + 1218, + 1219 ] }, { - "teal": 1240, + "teal": 1234, "source": 275, "pc": [ - 1231 + 1220 ] }, { - "teal": 1241, + "teal": 1235, "source": 275, "pc": [ - 1232, - 1233 + 1221, + 1222 ] }, { - "teal": 1244, + "teal": 1238, "source": 275, "pc": [ - 1234 + 1223 ] }, { - "teal": 1245, + "teal": 1239, "source": 264, "pc": [ - 1235 + 1224 ] }, { - "teal": 1250, + "teal": 1244, "source": 289, "pc": [ - 1236 + 1225 ] }, { - "teal": 1253, + "teal": 1247, "source": 289, "pc": [ - 1237, - 1238, - 1239 + 1226, + 1227, + 1228 ] }, { - "teal": 1254, + "teal": 1248, "source": 289, "pc": [ - 1240 + 1229 ] }, { - "teal": 1255, + "teal": 1249, "source": 289, "pc": [ - 1241 + 1230 ] }, { - "teal": 1256, + "teal": 1250, "source": 289, "pc": [ - 1242 + 1231 ] }, { - "teal": 1257, + "teal": 1251, "source": 289, "pc": [ - 1243 + 1232 ] }, { - "teal": 1258, + "teal": 1252, "source": 289, "pc": [ - 1244 + 1233 ] }, { - "teal": 1261, + "teal": 1255, "source": 289, "pc": [ - 1245, - 1246, - 1247 + 1234, + 1235, + 1236 ] }, { - "teal": 1262, + "teal": 1256, "source": 289, "pc": [ - 1248 + 1237 ] }, { - "teal": 1263, + "teal": 1257, "source": 289, "pc": [ - 1249 + 1238 ] }, { - "teal": 1264, + "teal": 1258, "source": 289, "pc": [ - 1250 + 1239 ] }, { - "teal": 1265, + "teal": 1259, "source": 289, "pc": [ - 1251 + 1240 ] }, { - "teal": 1275, + "teal": 1269, "source": 289, "pc": [ - 1252, - 1253, - 1254 + 1241, + 1242, + 1243 ] }, { - "teal": 1279, + "teal": 1273, "source": 290, "pc": [ - 1255, - 1256 + 1244, + 1245 ] }, { - "teal": 1280, + "teal": 1274, "source": 290, "pc": [ - 1257 + 1246 ] }, { - "teal": 1281, + "teal": 1275, "source": 290, "pc": [ - 1258 + 1247 ] }, { - "teal": 1282, + "teal": 1276, "source": 290, "pc": [ - 1259 + 1248 ] }, { - "teal": 1283, + "teal": 1277, "source": 290, "pc": [ - 1260, - 1261, - 1262 + 1249, + 1250, + 1251 ] }, { - "teal": 1284, + "teal": 1278, "source": 290, "pc": [ - 1263, - 1264 + 1252, + 1253 ] }, { - "teal": 1285, + "teal": 1279, "source": 290, "pc": [ - 1265 + 1254 ] }, { - "teal": 1286, + "teal": 1280, "source": 290, "pc": [ - 1266 + 1255 ] }, { - "teal": 1287, + "teal": 1281, "source": 290, "pc": [ - 1267, - 1268, - 1269 + 1256, + 1257, + 1258 ] }, { - "teal": 1290, + "teal": 1284, "source": 290, "pc": [ - 1270, - 1271 + 1259, + 1260 ] }, { - "teal": 1293, + "teal": 1287, "source": 289, "pc": [ - 1272 + 1261 ] }, { - "teal": 1298, + "teal": 1292, "source": 294, "pc": [ - 1273, - 1274, - 1275 + 1262, + 1263, + 1264 ] }, { - "teal": 1299, + "teal": 1293, "source": 294, "pc": [ - 1276 + 1265 ] }, { - "teal": 1300, + "teal": 1294, "source": 294, "pc": [ - 1277 + 1266 ] }, { - "teal": 1306, + "teal": 1300, "source": 294, "pc": [ - 1278, - 1279, - 1280 + 1267, + 1268, + 1269 ] }, { - "teal": 1309, + "teal": 1303, "source": 294, "pc": [ - 1281 + 1270 ] }, { - "teal": 1313, + "teal": 1307, "source": 295, "pc": [ - 1282, - 1283 + 1271, + 1272 ] }, { - "teal": 1314, + "teal": 1308, "source": 295, "pc": [ - 1284 + 1273 ] }, { - "teal": 1315, + "teal": 1309, "source": 295, "pc": [ - 1285 + 1274 ] }, { - "teal": 1316, + "teal": 1310, "source": 295, "pc": [ - 1286, - 1287 + 1275, + 1276 ] }, { - "teal": 1320, + "teal": 1314, "source": 297, "pc": [ - 1288, - 1289 + 1277, + 1278 ] }, { - "teal": 1321, + "teal": 1315, "source": 297, "pc": [ - 1290, - 1291 + 1279, + 1280 ] }, { - "teal": 1322, + "teal": 1316, "source": 297, "pc": [ - 1292 + 1281 ] }, { - "teal": 1323, + "teal": 1317, "source": 297, "pc": [ - 1293, - 1294 + 1282, + 1283 ] }, { - "teal": 1324, + "teal": 1318, "source": 297, "pc": [ - 1295, - 1296 + 1284, + 1285 ] }, { - "teal": 1325, + "teal": 1319, "source": 297, "pc": [ - 1297 + 1286 ] }, { - "teal": 1326, + "teal": 1320, "source": 297, "pc": [ - 1298 + 1287 ] }, { - "teal": 1327, + "teal": 1321, "source": 297, "pc": [ - 1299 + 1288 ] }, { - "teal": 1328, + "teal": 1322, "source": 297, "pc": [ - 1300 + 1289 ] }, { - "teal": 1329, + "teal": 1323, "source": 297, "pc": [ - 1301 + 1290 ] }, { - "teal": 1337, + "teal": 1331, "source": 299, "pc": [ - 1302 + 1291 ] }, { - "teal": 1338, + "teal": 1332, "source": 299, "pc": [ - 1303 + 1292 ] }, { - "teal": 1339, + "teal": 1333, "source": 299, "pc": [ - 1304, - 1305 + 1293, + 1294 ] }, { - "teal": 1343, + "teal": 1337, "source": 300, "pc": [ - 1306, - 1307 + 1295, + 1296 ] }, { - "teal": 1344, + "teal": 1338, "source": 300, "pc": [ - 1308, - 1309 + 1297, + 1298 ] }, { - "teal": 1348, + "teal": 1342, "source": 301, "pc": [ - 1310, - 1311 + 1299, + 1300 ] }, { - "teal": 1349, + "teal": 1343, "source": 301, "pc": [ - 1312, - 1313 + 1301, + 1302 ] }, { - "teal": 1353, + "teal": 1347, "source": 302, "pc": [ - 1314, - 1315 + 1303, + 1304 ] }, { - "teal": 1354, + "teal": 1348, "source": 302, "pc": [ - 1316, - 1317 + 1305, + 1306 ] }, { - "teal": 1355, + "teal": 1349, "source": 302, "pc": [ - 1318 + 1307 ] }, { - "teal": 1356, + "teal": 1350, "source": 302, "pc": [ - 1319, - 1320 + 1308, + 1309 ] }, { - "teal": 1357, + "teal": 1351, "source": 302, "pc": [ - 1321, - 1322 + 1310, + 1311 ] }, { - "teal": 1358, + "teal": 1352, "source": 302, "pc": [ - 1323 + 1312 ] }, { - "teal": 1359, + "teal": 1353, "source": 302, "pc": [ - 1324 + 1313 ] }, { - "teal": 1360, + "teal": 1354, "source": 302, "pc": [ - 1325, - 1326 + 1314, + 1315 ] }, { - "teal": 1363, + "teal": 1357, "source": 299, "pc": [ - 1327 + 1316 ] }, { - "teal": 1364, + "teal": 1358, "source": 299, "pc": [ - 1328, - 1329 + 1317, + 1318 ] }, { - "teal": 1367, + "teal": 1361, "source": 299, "pc": [ - 1330 + 1319 ] }, { - "teal": 1368, + "teal": 1362, "source": 294, "pc": [ - 1331 + 1320 ] }, { - "teal": 1371, + "teal": 1365, + "source": 35, + "pc": [ + 1321, + 1322, + 1323, + 1324, + 1325, + 1326 + ] + }, + { + "teal": 1366, + "source": 35, + "pc": [ + 1327, + 1328, + 1329 + ] + }, + { + "teal": 1367, "source": 35, "pc": [ + 1330, + 1331, 1332, - 1333, - 1334, - 1335, - 1336, - 1337 + 1333 ] }, { - "teal": 1372, + "teal": 1368, "source": 35, "pc": [ + 1334 + ] + }, + { + "teal": 1371, + "source": 35, + "pc": [ + 1335, + 1336, + 1337, 1338, 1339, 1340 ] }, { - "teal": 1373, + "teal": 1372, "source": 35, "pc": [ 1341, 1342, 1343, - 1344 - ] - }, - { - "teal": 1374, - "source": 35, - "pc": [ - 1345 + 1344, + 1345, + 1346 ] }, { - "teal": 1377, + "teal": 1373, "source": 35, "pc": [ - 1346, 1347, 1348, 1349, 1350, - 1351 + 1351, + 1352 ] }, { - "teal": 1378, + "teal": 1374, "source": 35, "pc": [ - 1352, 1353, 1354, 1355, 1356, - 1357 + 1357, + 1358 ] }, { - "teal": 1379, + "teal": 1375, "source": 35, "pc": [ - 1358, 1359, 1360, 1361, 1362, - 1363 + 1363, + 1364 ] }, { - "teal": 1380, + "teal": 1376, "source": 35, "pc": [ - 1364, 1365, 1366, 1367, 1368, - 1369 + 1369, + 1370 ] }, { - "teal": 1381, + "teal": 1377, "source": 35, "pc": [ - 1370, 1371, 1372, 1373, 1374, - 1375 + 1375, + 1376 ] }, { - "teal": 1382, + "teal": 1378, "source": 35, "pc": [ - 1376, 1377, 1378, 1379, 1380, - 1381 + 1381, + 1382 ] }, { - "teal": 1383, + "teal": 1379, "source": 35, "pc": [ - 1382, 1383, 1384, - 1385, - 1386, - 1387 + 1385 ] }, { - "teal": 1384, + "teal": 1380, "source": 35, "pc": [ + 1386, + 1387, 1388, 1389, 1390, 1391, 1392, - 1393 - ] - }, - { - "teal": 1385, - "source": 35, - "pc": [ + 1393, 1394, 1395, - 1396 - ] - }, - { - "teal": 1386, - "source": 35, - "pc": [ + 1396, 1397, 1398, 1399, 1400, 1401, 1402, - 1403, - 1404, - 1405, - 1406, - 1407, - 1408, - 1409, - 1410, - 1411, - 1412, - 1413, - 1414 - ] - }, - { - "teal": 1387, + 1403 + ] + }, + { + "teal": 1381, "source": 35, "pc": [ - 1415 + 1404 ] } ] \ No newline at end of file diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal index 60f309ab5..d30799a86 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal @@ -315,22 +315,16 @@ arc59_getSendAssetInfo: // *if2_consequent // contracts/arc59.algo.ts:104 - // info.receiverAlgoNeededForClaim += algoNeededToClaim - receiver.balance + // 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 diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json index 150b43d95..4c166ecbf 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA4CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEwCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTMKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjAKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMQoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIyCgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMwoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI2CgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMzCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM1CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNwoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDIKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDcKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUzCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTQKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU1CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1OQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzIKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTIKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI2CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMyCgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDcKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcwCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkwCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAwCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDIKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy9tdXRhYmxlX2FyYzU5LmFsZ28udHM6NQoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5hcHAuY3JlYXRvcikKCXR4biBTZW5kZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKCXBvcAoJPT0KCWFzc2VydAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json index 46539222b..7460525bd 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json @@ -1347,146 +1347,146 @@ "teal": 326, "source": 8, "pc": [ - 414, - 415, - 416 + 414 ] }, { "teal": 327, "source": 8, "pc": [ - 417 + 415 ] }, { "teal": 328, "source": 8, "pc": [ - 418, - 419 + 416 ] }, { "teal": 329, "source": 8, "pc": [ - 420, - 421 + 417 ] }, { "teal": 330, "source": 8, "pc": [ - 422, - 423 + 418, + 419 ] }, { - "teal": 331, + "teal": 336, "source": 8, "pc": [ - 424 + 420, + 421 ] }, { - "teal": 332, + "teal": 337, "source": 8, "pc": [ - 425 + 422 ] }, { - "teal": 333, + "teal": 338, "source": 8, "pc": [ - 426 + 423, + 424, + 425 ] }, { - "teal": 334, + "teal": 343, "source": 8, "pc": [ + 426, 427 ] }, { - "teal": 335, + "teal": 344, "source": 8, "pc": [ - 428 + 428, + 429 ] }, { - "teal": 336, + "teal": 345, "source": 8, "pc": [ - 429, - 430 + 430, + 431 ] }, { - "teal": 342, + "teal": 346, "source": 8, "pc": [ - 431, - 432 + 432, + 433 ] }, { - "teal": 343, + "teal": 347, "source": 8, "pc": [ - 433 + 434, + 435 ] }, { - "teal": 344, + "teal": 348, "source": 8, "pc": [ - 434, - 435, - 436 + 436, + 437 ] }, { "teal": 349, "source": 8, "pc": [ - 437, - 438 + 438, + 439 ] }, { "teal": 350, "source": 8, "pc": [ - 439, - 440 + 440, + 441, + 442 ] }, { "teal": 351, "source": 8, "pc": [ - 441, - 442 + 443 ] }, { "teal": 352, "source": 8, "pc": [ - 443, - 444 + 444, + 445 ] }, { "teal": 353, "source": 8, "pc": [ - 445, 446 ] }, @@ -1494,36 +1494,42 @@ "teal": 354, "source": 8, "pc": [ - 447, - 448 + 447 ] }, { "teal": 355, "source": 8, + "pc": [ + 448 + ] + }, + { + "teal": 356, + "source": 8, "pc": [ 449, 450 ] }, { - "teal": 356, + "teal": 360, "source": 8, "pc": [ 451, - 452, - 453 + 452 ] }, { - "teal": 357, + "teal": 361, "source": 8, "pc": [ + 453, 454 ] }, { - "teal": 358, + "teal": 362, "source": 8, "pc": [ 455, @@ -1531,28 +1537,22 @@ ] }, { - "teal": 359, + "teal": 363, "source": 8, "pc": [ 457 ] }, { - "teal": 360, - "source": 8, - "pc": [ - 458 - ] - }, - { - "teal": 361, + "teal": 364, "source": 8, "pc": [ + 458, 459 ] }, { - "teal": 362, + "teal": 365, "source": 8, "pc": [ 460, @@ -1572,14 +1572,14 @@ "source": 8, "pc": [ 464, - 465 + 465, + 466 ] }, { "teal": 368, "source": 8, "pc": [ - 466, 467 ] }, @@ -1594,119 +1594,119 @@ "teal": 370, "source": 8, "pc": [ - 469, - 470 + 469 ] }, { "teal": 371, "source": 8, "pc": [ - 471, - 472 + 470 ] }, { "teal": 372, "source": 8, "pc": [ - 473, - 474 + 471 ] }, { "teal": 373, "source": 8, "pc": [ - 475, - 476, - 477 + 472, + 473 ] }, { - "teal": 374, + "teal": 379, "source": 8, "pc": [ - 478 + 474, + 475 ] }, { - "teal": 375, + "teal": 380, "source": 8, "pc": [ - 479 + 476 ] }, { - "teal": 376, + "teal": 381, "source": 8, "pc": [ - 480 + 477 ] }, { - "teal": 377, + "teal": 382, "source": 8, "pc": [ - 481 + 478 ] }, { - "teal": 378, + "teal": 383, "source": 8, "pc": [ - 482 + 479 ] }, { - "teal": 379, + "teal": 384, "source": 8, "pc": [ - 483, - 484 + 480, + 481, + 482 ] }, { - "teal": 385, + "teal": 389, "source": 8, "pc": [ - 485, - 486 + 483, + 484 ] }, { - "teal": 386, + "teal": 390, "source": 8, "pc": [ - 487 + 485, + 486 ] }, { - "teal": 387, + "teal": 391, "source": 8, "pc": [ + 487, 488 ] }, { - "teal": 388, + "teal": 392, "source": 8, "pc": [ 489 ] }, { - "teal": 389, + "teal": 393, "source": 8, "pc": [ - 490 + 490, + 491 ] }, { - "teal": 390, + "teal": 394, "source": 8, "pc": [ - 491, 492, 493 ] @@ -1724,14 +1724,14 @@ "source": 8, "pc": [ 496, - 497 + 497, + 498 ] }, { "teal": 397, "source": 8, "pc": [ - 498, 499 ] }, @@ -1746,72 +1746,72 @@ "teal": 399, "source": 8, "pc": [ - 501, - 502 + 501 ] }, { "teal": 400, "source": 8, "pc": [ - 503, - 504 + 502 ] }, { "teal": 401, "source": 8, "pc": [ - 505, - 506 + 503 ] }, { "teal": 402, "source": 8, "pc": [ - 507, - 508, - 509 + 504, + 505 ] }, { - "teal": 403, + "teal": 406, "source": 8, "pc": [ - 510 + 506, + 507 ] }, { - "teal": 404, + "teal": 407, "source": 8, "pc": [ - 511 + 508, + 509 ] }, { - "teal": 405, + "teal": 408, "source": 8, "pc": [ - 512 + 510 ] }, { - "teal": 406, + "teal": 409, "source": 8, "pc": [ - 513 + 511, + 512 ] }, { - "teal": 407, + "teal": 413, "source": 8, "pc": [ + 513, 514 ] }, { - "teal": 408, + "teal": 414, "source": 8, "pc": [ 515, @@ -1819,46 +1819,52 @@ ] }, { - "teal": 412, + "teal": 415, "source": 8, "pc": [ - 517, - 518 + 517 ] }, { - "teal": 413, + "teal": 419, "source": 8, "pc": [ - 519, - 520 + 518, + 519 ] }, { - "teal": 414, + "teal": 420, "source": 8, "pc": [ + 520, 521 ] }, { - "teal": 415, + "teal": 421, "source": 8, "pc": [ - 522, - 523 + 522 ] }, { - "teal": 419, + "teal": 422, + "source": 8, + "pc": [ + 523, + 524 + ] + }, + { + "teal": 423, "source": 8, "pc": [ - 524, 525 ] }, { - "teal": 420, + "teal": 424, "source": 8, "pc": [ 526, @@ -1866,22 +1872,22 @@ ] }, { - "teal": 421, + "teal": 428, "source": 8, "pc": [ - 528 + 528, + 529 ] }, { - "teal": 425, + "teal": 429, "source": 8, "pc": [ - 529, 530 ] }, { - "teal": 426, + "teal": 433, "source": 8, "pc": [ 531, @@ -1889,29 +1895,23 @@ ] }, { - "teal": 427, - "source": 8, - "pc": [ - 533 - ] - }, - { - "teal": 428, + "teal": 434, "source": 8, "pc": [ - 534, - 535 + 533, + 534 ] }, { - "teal": 429, + "teal": 435, "source": 8, "pc": [ + 535, 536 ] }, { - "teal": 430, + "teal": 436, "source": 8, "pc": [ 537, @@ -1919,7 +1919,7 @@ ] }, { - "teal": 434, + "teal": 437, "source": 8, "pc": [ 539, @@ -1927,57 +1927,57 @@ ] }, { - "teal": 435, + "teal": 438, "source": 8, "pc": [ - 541 + 541, + 542 ] }, { "teal": 439, "source": 8, "pc": [ - 542, - 543 + 543, + 544 ] }, { "teal": 440, "source": 8, "pc": [ - 544, - 545 + 545, + 546, + 547 ] }, { "teal": 441, "source": 8, "pc": [ - 546, - 547 + 548 ] }, { "teal": 442, "source": 8, "pc": [ - 548, - 549 + 549, + 550 ] }, { "teal": 443, "source": 8, "pc": [ - 550, - 551 + 551, + 552 ] }, { "teal": 444, "source": 8, "pc": [ - 552, 553 ] }, @@ -1993,79 +1993,79 @@ "teal": 446, "source": 8, "pc": [ - 556, - 557, - 558 + 556 ] }, { "teal": 447, "source": 8, "pc": [ - 559 + 557 ] }, { "teal": 448, "source": 8, "pc": [ - 560, - 561 + 558 ] }, { "teal": 449, "source": 8, "pc": [ - 562, - 563 + 559 ] }, { "teal": 450, "source": 8, "pc": [ - 564 + 560, + 561 ] }, { - "teal": 451, + "teal": 454, "source": 8, "pc": [ - 565, - 566 + 562, + 563 ] }, { - "teal": 452, + "teal": 455, "source": 8, "pc": [ - 567 + 564, + 565, + 566 ] }, { - "teal": 453, + "teal": 460, "source": 8, "pc": [ + 567, 568 ] }, { - "teal": 454, + "teal": 461, "source": 8, "pc": [ 569 ] }, { - "teal": 455, + "teal": 462, "source": 8, "pc": [ 570 ] }, { - "teal": 456, + "teal": 463, "source": 8, "pc": [ 571, @@ -2073,7 +2073,7 @@ ] }, { - "teal": 460, + "teal": 468, "source": 8, "pc": [ 573, @@ -2081,94 +2081,94 @@ ] }, { - "teal": 461, + "teal": 469, "source": 8, "pc": [ 575, - 576, - 577 + 576 ] }, { - "teal": 466, + "teal": 470, "source": 8, "pc": [ - 578, - 579 + 577, + 578 ] }, { - "teal": 467, + "teal": 471, "source": 8, "pc": [ - 580 + 579 ] }, { - "teal": 468, + "teal": 472, "source": 8, "pc": [ - 581 + 580 ] }, { - "teal": 469, + "teal": 473, "source": 8, "pc": [ - 582, - 583 + 581 ] }, { "teal": 474, "source": 8, "pc": [ - 584, - 585 + 582, + 583, + 584 ] }, { - "teal": 475, + "teal": 479, "source": 8, "pc": [ - 586, - 587 + 585, + 586 ] }, { - "teal": 476, + "teal": 480, "source": 8, "pc": [ - 588, - 589 + 587, + 588 ] }, { - "teal": 477, + "teal": 481, "source": 8, "pc": [ + 589, 590 ] }, { - "teal": 478, + "teal": 482, "source": 8, "pc": [ 591 ] }, { - "teal": 479, + "teal": 483, "source": 8, "pc": [ - 592 + 592, + 593 ] }, { - "teal": 480, + "teal": 484, "source": 8, "pc": [ - 593, 594, 595 ] @@ -2186,14 +2186,14 @@ "source": 8, "pc": [ 598, - 599 + 599, + 600 ] }, { "teal": 487, "source": 8, "pc": [ - 600, 601 ] }, @@ -2208,158 +2208,158 @@ "teal": 489, "source": 8, "pc": [ - 603, - 604 + 603 ] }, { "teal": 490, "source": 8, "pc": [ - 605, - 606 + 604 ] }, { "teal": 491, "source": 8, "pc": [ - 607, - 608 + 605 ] }, { "teal": 492, "source": 8, "pc": [ - 609, - 610, - 611 + 606, + 607 ] }, { - "teal": 493, + "teal": 497, "source": 8, "pc": [ - 612 + 608, + 609 ] }, { - "teal": 494, + "teal": 498, "source": 8, "pc": [ - 613 + 610, + 611 ] }, { - "teal": 495, + "teal": 499, "source": 8, "pc": [ - 614 + 612 ] }, { - "teal": 496, + "teal": 500, "source": 8, "pc": [ - 615 + 613, + 614 ] }, { - "teal": 497, + "teal": 501, "source": 8, "pc": [ + 615, 616 ] }, { - "teal": 498, + "teal": 502, "source": 8, "pc": [ - 617, - 618 + 617 ] }, { "teal": 503, "source": 8, "pc": [ - 619, - 620 + 618, + 619 ] }, { "teal": 504, "source": 8, "pc": [ - 621, - 622 + 620 ] }, { "teal": 505, "source": 8, "pc": [ - 623 + 621 ] }, { "teal": 506, "source": 8, "pc": [ - 624, - 625 + 622 ] }, { "teal": 507, "source": 8, "pc": [ - 626, - 627 + 623, + 624, + 625 ] }, { - "teal": 508, + "teal": 512, "source": 8, "pc": [ - 628 + 626, + 627 ] }, { - "teal": 509, + "teal": 513, "source": 8, "pc": [ - 629, - 630 + 628, + 629 ] }, { - "teal": 510, + "teal": 514, "source": 8, "pc": [ + 630, 631 ] }, { - "teal": 511, + "teal": 515, "source": 8, "pc": [ 632 ] }, { - "teal": 512, + "teal": 516, "source": 8, "pc": [ - 633 + 633, + 634 ] }, { - "teal": 513, + "teal": 517, "source": 8, "pc": [ - 634, 635, 636 ] @@ -2377,14 +2377,14 @@ "source": 8, "pc": [ 639, - 640 + 640, + 641 ] }, { "teal": 520, "source": 8, "pc": [ - 641, 642 ] }, @@ -2399,115 +2399,115 @@ "teal": 522, "source": 8, "pc": [ - 644, - 645 + 644 ] }, { "teal": 523, "source": 8, "pc": [ - 646, - 647 + 645 ] }, { "teal": 524, "source": 8, "pc": [ - 648, - 649 + 646 ] }, { "teal": 525, "source": 8, "pc": [ - 650, - 651, - 652 + 647, + 648 ] }, { - "teal": 526, + "teal": 529, "source": 8, "pc": [ - 653 + 649, + 650 ] }, { - "teal": 527, + "teal": 530, "source": 8, "pc": [ - 654 + 651, + 652 ] }, { - "teal": 528, + "teal": 531, "source": 8, "pc": [ - 655 + 653, + 654 ] }, { - "teal": 529, + "teal": 532, "source": 8, "pc": [ + 655, 656 ] }, { - "teal": 530, + "teal": 533, "source": 8, "pc": [ - 657 + 657, + 658 ] }, { - "teal": 531, + "teal": 534, "source": 8, "pc": [ - 658, - 659 + 659, + 660 ] }, { "teal": 535, "source": 8, "pc": [ - 660, - 661 + 661, + 662 ] }, { "teal": 536, "source": 8, "pc": [ - 662, - 663 + 663, + 664, + 665 ] }, { "teal": 537, "source": 8, "pc": [ - 664, - 665 + 666 ] }, { "teal": 538, "source": 8, "pc": [ - 666, - 667 + 667, + 668 ] }, { "teal": 539, "source": 8, "pc": [ - 668, 669 ] }, @@ -2515,114 +2515,114 @@ "teal": 540, "source": 8, "pc": [ - 670, - 671 + 670 ] }, { "teal": 541, "source": 8, "pc": [ - 672, - 673 + 671 ] }, { "teal": 542, "source": 8, "pc": [ - 674, - 675, - 676 + 672, + 673 ] }, { - "teal": 543, + "teal": 550, "source": 8, "pc": [ - 677 + 674, + 675 ] }, { - "teal": 544, + "teal": 551, "source": 8, "pc": [ - 678, - 679 + 676, + 677 ] }, { - "teal": 545, + "teal": 552, "source": 8, "pc": [ - 680 + 678 ] }, { - "teal": 546, + "teal": 553, "source": 8, "pc": [ - 681 + 679, + 680 ] }, { - "teal": 547, + "teal": 554, "source": 8, "pc": [ + 681, 682 ] }, { - "teal": 548, + "teal": 555, "source": 8, "pc": [ - 683, - 684 + 683 ] }, { "teal": 556, "source": 8, "pc": [ - 685, - 686 + 684 ] }, { "teal": 557, "source": 8, "pc": [ - 687, - 688 + 685 ] }, { "teal": 558, "source": 8, "pc": [ - 689 + 686, + 687, + 688 ] }, { "teal": 559, "source": 8, "pc": [ - 690, - 691 + 689, + 690 ] }, { "teal": 560, "source": 8, "pc": [ - 692, - 693 + 691, + 692 ] }, { "teal": 561, "source": 8, "pc": [ + 693, 694 ] }, @@ -2630,22 +2630,22 @@ "teal": 562, "source": 8, "pc": [ - 695 + 695, + 696, + 697 ] }, { "teal": 563, "source": 8, "pc": [ - 696 + 698 ] }, { "teal": 564, "source": 8, "pc": [ - 697, - 698, 699 ] }, @@ -2653,77 +2653,77 @@ "teal": 565, "source": 8, "pc": [ - 700, - 701 + 700 ] }, { "teal": 566, "source": 8, "pc": [ - 702, - 703 + 701 ] }, { - "teal": 567, + "teal": 569, "source": 8, "pc": [ - 704, - 705 + 702, + 703, + 704 ] }, { - "teal": 568, + "teal": 574, "source": 8, "pc": [ - 706, - 707, - 708 + 705, + 706 ] }, { - "teal": 569, + "teal": 575, "source": 8, "pc": [ - 709 + 707, + 708 ] }, { - "teal": 570, + "teal": 576, "source": 8, "pc": [ + 709, 710 ] }, { - "teal": 571, + "teal": 577, "source": 8, "pc": [ - 711 + 711, + 712 ] }, { - "teal": 572, + "teal": 578, "source": 8, "pc": [ - 712 + 713, + 714, + 715 ] }, { - "teal": 575, + "teal": 579, "source": 8, "pc": [ - 713, - 714, - 715 + 716 ] }, { "teal": 580, "source": 8, "pc": [ - 716, 717 ] }, @@ -2731,58 +2731,64 @@ "teal": 581, "source": 8, "pc": [ - 718, - 719 + 718 ] }, { "teal": 582, "source": 8, "pc": [ - 720, - 721 + 719, + 720 ] }, { "teal": 583, "source": 8, "pc": [ - 722, - 723 + 721 ] }, { "teal": 584, "source": 8, "pc": [ - 724, - 725, - 726 + 722 ] }, { "teal": 585, "source": 8, "pc": [ - 727 + 723, + 724 ] }, { - "teal": 586, + "teal": 589, "source": 8, "pc": [ - 728 + 725, + 726 ] }, { - "teal": 587, + "teal": 590, + "source": 8, + "pc": [ + 727, + 728 + ] + }, + { + "teal": 591, "source": 8, "pc": [ 729 ] }, { - "teal": 588, + "teal": 592, "source": 8, "pc": [ 730, @@ -2790,29 +2796,29 @@ ] }, { - "teal": 589, + "teal": 593, "source": 8, "pc": [ - 732 + 732, + 733 ] }, { - "teal": 590, + "teal": 594, "source": 8, "pc": [ - 733 + 734 ] }, { - "teal": 591, + "teal": 595, "source": 8, "pc": [ - 734, 735 ] }, { - "teal": 595, + "teal": 596, "source": 8, "pc": [ 736, @@ -2820,22 +2826,22 @@ ] }, { - "teal": 596, + "teal": 597, "source": 8, "pc": [ - 738, - 739 + 738 ] }, { - "teal": 597, + "teal": 598, "source": 8, "pc": [ + 739, 740 ] }, { - "teal": 598, + "teal": 603, "source": 8, "pc": [ 741, @@ -2843,7 +2849,7 @@ ] }, { - "teal": 599, + "teal": 604, "source": 8, "pc": [ 743, @@ -2851,21 +2857,15 @@ ] }, { - "teal": 600, - "source": 8, - "pc": [ - 745 - ] - }, - { - "teal": 601, + "teal": 605, "source": 8, "pc": [ + 745, 746 ] }, { - "teal": 602, + "teal": 606, "source": 8, "pc": [ 747, @@ -2873,25 +2873,25 @@ ] }, { - "teal": 603, + "teal": 607, "source": 8, "pc": [ - 749 + 749, + 750, + 751 ] }, { - "teal": 604, + "teal": 608, "source": 8, "pc": [ - 750, - 751 + 752 ] }, { "teal": 609, "source": 8, "pc": [ - 752, 753 ] }, @@ -2900,94 +2900,94 @@ "source": 8, "pc": [ 754, - 755 + 755, + 756 ] }, { - "teal": 611, + "teal": 615, "source": 8, "pc": [ - 756, - 757 + 757, + 758 ] }, { - "teal": 612, + "teal": 616, "source": 8, "pc": [ - 758, - 759 + 759, + 760 ] }, { - "teal": 613, + "teal": 617, "source": 8, "pc": [ - 760, 761, 762 ] }, { - "teal": 614, + "teal": 618, "source": 8, "pc": [ - 763 + 763, + 764 ] }, { - "teal": 615, + "teal": 619, "source": 8, "pc": [ - 764 + 765, + 766 ] }, { - "teal": 616, + "teal": 620, "source": 8, "pc": [ - 765, - 766, - 767 + 767, + 768 ] }, { "teal": 621, "source": 8, "pc": [ - 768, - 769 + 769, + 770 ] }, { "teal": 622, "source": 8, "pc": [ - 770, - 771 + 771, + 772, + 773 ] }, { "teal": 623, "source": 8, "pc": [ - 772, - 773 + 774 ] }, { "teal": 624, "source": 8, "pc": [ - 774, - 775 + 775, + 776 ] }, { "teal": 625, "source": 8, "pc": [ - 776, 777 ] }, @@ -2995,36 +2995,42 @@ "teal": 626, "source": 8, "pc": [ - 778, - 779 + 778 ] }, { "teal": 627, "source": 8, + "pc": [ + 779 + ] + }, + { + "teal": 628, + "source": 8, "pc": [ 780, 781 ] }, { - "teal": 628, + "teal": 635, "source": 8, "pc": [ 782, - 783, - 784 + 783 ] }, { - "teal": 629, + "teal": 639, "source": 8, "pc": [ + 784, 785 ] }, { - "teal": 630, + "teal": 642, "source": 8, "pc": [ 786, @@ -3032,307 +3038,307 @@ ] }, { - "teal": 631, + "teal": 643, "source": 8, "pc": [ 788 ] }, { - "teal": 632, + "teal": 648, "source": 8, "pc": [ 789 ] }, { - "teal": 633, + "teal": 651, "source": 8, "pc": [ - 790 + 790, + 791, + 792 ] }, { - "teal": 634, + "teal": 652, "source": 8, "pc": [ - 791, - 792 + 793 ] }, { - "teal": 641, + "teal": 655, "source": 8, "pc": [ - 793, - 794 + 794, + 795, + 796 ] }, { - "teal": 645, + "teal": 656, "source": 8, "pc": [ - 795, - 796 + 797 ] }, { - "teal": 648, + "teal": 657, "source": 8, "pc": [ - 797, 798 ] }, { - "teal": 649, + "teal": 658, "source": 8, "pc": [ 799 ] }, { - "teal": 654, + "teal": 659, "source": 8, "pc": [ 800 ] }, { - "teal": 657, + "teal": 660, + "source": 8, + "pc": [ + 801 + ] + }, + { + "teal": 663, "source": 8, "pc": [ - 801, 802, 803 ] }, { - "teal": 658, + "teal": 664, "source": 8, "pc": [ 804 ] }, { - "teal": 661, + "teal": 665, "source": 8, "pc": [ - 805, - 806, - 807 + 805 ] }, { - "teal": 662, + "teal": 666, "source": 8, "pc": [ - 808 + 806 ] }, { - "teal": 663, + "teal": 667, "source": 8, "pc": [ - 809 + 807, + 808 ] }, { - "teal": 664, + "teal": 668, "source": 8, "pc": [ - 810 + 809 ] }, { - "teal": 665, + "teal": 669, "source": 8, "pc": [ - 811 + 810 ] }, { - "teal": 666, + "teal": 670, "source": 8, "pc": [ - 812 + 811 ] }, { - "teal": 669, + "teal": 673, "source": 8, "pc": [ + 812, 813, 814 ] }, { - "teal": 670, + "teal": 674, "source": 8, "pc": [ 815 ] }, { - "teal": 671, + "teal": 675, "source": 8, "pc": [ 816 ] }, { - "teal": 672, + "teal": 676, "source": 8, "pc": [ 817 ] }, { - "teal": 673, - "source": 8, - "pc": [ - 818, - 819 - ] - }, - { - "teal": 674, + "teal": 677, "source": 8, "pc": [ - 820 + 818 ] }, { - "teal": 675, + "teal": 689, "source": 8, "pc": [ + 819, + 820, 821 ] }, { - "teal": 676, + "teal": 692, "source": 8, "pc": [ 822 ] }, { - "teal": 679, + "teal": 693, "source": 8, "pc": [ 823, - 824, - 825 + 824 ] }, { - "teal": 680, + "teal": 700, "source": 8, "pc": [ + 825, 826 ] }, { - "teal": 681, + "teal": 701, "source": 8, "pc": [ - 827 + 827, + 828 ] }, { - "teal": 682, + "teal": 702, "source": 8, "pc": [ - 828 + 829, + 830 ] }, { - "teal": 683, + "teal": 703, "source": 8, "pc": [ - 829 + 831 ] }, { - "teal": 695, + "teal": 704, "source": 8, "pc": [ - 830, - 831, 832 ] }, { - "teal": 698, + "teal": 709, "source": 8, "pc": [ - 833 + 833, + 834 ] }, { - "teal": 699, + "teal": 710, "source": 8, "pc": [ - 834, - 835 + 835, + 836 ] }, { - "teal": 706, + "teal": 711, "source": 8, "pc": [ - 836, - 837 + 837, + 838 ] }, { - "teal": 707, + "teal": 712, "source": 8, "pc": [ - 838, - 839 + 839, + 840 ] }, { - "teal": 708, + "teal": 713, "source": 8, "pc": [ - 840, 841 ] }, { - "teal": 709, + "teal": 714, "source": 8, "pc": [ 842 ] }, { - "teal": 710, + "teal": 715, "source": 8, "pc": [ - 843 + 843, + 844, + 845 ] }, { - "teal": 715, + "teal": 724, "source": 8, "pc": [ - 844, - 845 + 846 ] }, { - "teal": 716, + "teal": 725, "source": 8, "pc": [ - 846, 847 ] }, { - "teal": 717, + "teal": 726, "source": 8, "pc": [ 848, @@ -3340,7 +3346,7 @@ ] }, { - "teal": 718, + "teal": 730, "source": 8, "pc": [ 850, @@ -3348,76 +3354,70 @@ ] }, { - "teal": 719, - "source": 8, - "pc": [ - 852 - ] - }, - { - "teal": 720, + "teal": 731, "source": 8, "pc": [ + 852, 853 ] }, { - "teal": 721, + "teal": 735, "source": 8, "pc": [ 854, - 855, - 856 + 855 ] }, { - "teal": 730, + "teal": 736, "source": 8, "pc": [ + 856, 857 ] }, { - "teal": 731, + "teal": 737, "source": 8, "pc": [ - 858 + 858, + 859 ] }, { - "teal": 732, + "teal": 741, "source": 8, "pc": [ - 859, - 860 + 860, + 861 ] }, { - "teal": 736, + "teal": 742, "source": 8, "pc": [ - 861, - 862 + 862, + 863 ] }, { - "teal": 737, + "teal": 743, "source": 8, "pc": [ - 863, - 864 + 864, + 865 ] }, { - "teal": 741, + "teal": 746, "source": 8, "pc": [ - 865, 866 ] }, { - "teal": 742, + "teal": 747, "source": 8, "pc": [ 867, @@ -3425,61 +3425,67 @@ ] }, { - "teal": 743, + "teal": 750, "source": 8, "pc": [ - 869, - 870 + 869 ] }, { - "teal": 747, + "teal": 755, + "source": 8, + "pc": [ + 870, + 871 + ] + }, + { + "teal": 756, "source": 8, "pc": [ - 871, 872 ] }, { - "teal": 748, + "teal": 757, "source": 8, "pc": [ - 873, - 874 + 873 ] }, { - "teal": 749, + "teal": 758, "source": 8, "pc": [ + 874, 875, 876 ] }, { - "teal": 752, + "teal": 766, "source": 8, "pc": [ 877 ] }, { - "teal": 753, + "teal": 767, "source": 8, "pc": [ - 878, - 879 + 878 ] }, { - "teal": 756, + "teal": 768, "source": 8, "pc": [ + 879, 880 ] }, { - "teal": 761, + "teal": 772, "source": 8, "pc": [ 881, @@ -3487,44 +3493,38 @@ ] }, { - "teal": 762, - "source": 8, - "pc": [ - 883 - ] - }, - { - "teal": 763, + "teal": 773, "source": 8, "pc": [ + 883, 884 ] }, { - "teal": 764, + "teal": 777, "source": 8, "pc": [ 885, - 886, - 887 + 886 ] }, { - "teal": 772, + "teal": 778, "source": 8, "pc": [ + 887, 888 ] }, { - "teal": 773, + "teal": 781, "source": 8, "pc": [ 889 ] }, { - "teal": 774, + "teal": 782, "source": 8, "pc": [ 890, @@ -3532,31 +3532,31 @@ ] }, { - "teal": 778, + "teal": 785, "source": 8, "pc": [ - 892, - 893 + 892 ] }, { - "teal": 779, + "teal": 790, "source": 8, "pc": [ - 894, - 895 + 893, + 894 ] }, { - "teal": 783, + "teal": 791, "source": 8, "pc": [ + 895, 896, 897 ] }, { - "teal": 784, + "teal": 796, "source": 8, "pc": [ 898, @@ -3564,153 +3564,153 @@ ] }, { - "teal": 787, + "teal": 797, "source": 8, "pc": [ 900 ] }, { - "teal": 788, + "teal": 798, "source": 8, "pc": [ - 901, - 902 + 901 ] }, { - "teal": 791, + "teal": 799, "source": 8, "pc": [ - 903 + 902 ] }, { - "teal": 796, + "teal": 800, "source": 8, "pc": [ - 904, - 905 + 903, + 904 ] }, { - "teal": 797, + "teal": 804, "source": 8, "pc": [ - 906, - 907, - 908 + 905, + 906 ] }, { - "teal": 802, + "teal": 805, "source": 8, "pc": [ - 909, - 910 + 907, + 908, + 909 ] }, { - "teal": 803, + "teal": 806, "source": 8, "pc": [ + 910, 911 ] }, { - "teal": 804, + "teal": 811, "source": 8, "pc": [ - 912 + 912, + 913 ] }, { - "teal": 805, + "teal": 812, "source": 8, "pc": [ - 913 + 914 ] }, { - "teal": 806, + "teal": 813, "source": 8, "pc": [ - 914, 915 ] }, { - "teal": 810, + "teal": 814, "source": 8, "pc": [ 916, - 917 + 917, + 918 ] }, { - "teal": 811, + "teal": 822, "source": 8, "pc": [ - 918, - 919, - 920 + 919 ] }, { - "teal": 812, + "teal": 823, "source": 8, "pc": [ - 921, - 922 + 920 ] }, { - "teal": 817, + "teal": 824, "source": 8, "pc": [ - 923, - 924 + 921, + 922 ] }, { - "teal": 818, + "teal": 828, "source": 8, "pc": [ - 925 + 923, + 924 ] }, { - "teal": 819, + "teal": 829, "source": 8, "pc": [ + 925, 926 ] }, { - "teal": 820, + "teal": 833, "source": 8, "pc": [ 927, - 928, - 929 + 928 ] }, { - "teal": 828, + "teal": 834, "source": 8, "pc": [ + 929, 930 ] }, { - "teal": 829, + "teal": 837, "source": 8, "pc": [ 931 ] }, { - "teal": 830, + "teal": 838, "source": 8, "pc": [ 932, @@ -3718,139 +3718,139 @@ ] }, { - "teal": 834, + "teal": 841, "source": 8, "pc": [ - 934, - 935 + 934 ] }, { - "teal": 835, + "teal": 847, "source": 8, "pc": [ - 936, - 937 + 935, + 936 ] }, { - "teal": 839, + "teal": 848, "source": 8, "pc": [ - 938, - 939 + 937, + 938 ] }, { - "teal": 840, + "teal": 849, "source": 8, "pc": [ - 940, - 941 + 939, + 940 ] }, { - "teal": 843, + "teal": 850, "source": 8, "pc": [ + 941, 942 ] }, { - "teal": 844, + "teal": 851, "source": 8, "pc": [ - 943, - 944 + 943 ] }, { - "teal": 847, + "teal": 852, "source": 8, "pc": [ - 945 + 944 ] }, { "teal": 853, "source": 8, "pc": [ - 946, - 947 + 945 ] }, { "teal": 854, "source": 8, "pc": [ - 948, - 949 + 946, + 947, + 948 ] }, { - "teal": 855, + "teal": 859, "source": 8, "pc": [ - 950, - 951 + 949, + 950 ] }, { - "teal": 856, + "teal": 860, "source": 8, "pc": [ - 952, - 953 + 951, + 952 ] }, { - "teal": 857, + "teal": 865, "source": 8, "pc": [ + 953, 954 ] }, { - "teal": 858, + "teal": 866, "source": 8, "pc": [ 955 ] }, { - "teal": 859, + "teal": 867, "source": 8, "pc": [ - 956 + 956, + 957, + 958 ] }, { - "teal": 860, + "teal": 872, "source": 8, "pc": [ - 957, - 958, - 959 + 959, + 960 ] }, { - "teal": 865, + "teal": 873, "source": 8, "pc": [ - 960, - 961 + 961, + 962 ] }, { - "teal": 866, + "teal": 874, "source": 8, "pc": [ - 962, 963 ] }, { - "teal": 871, + "teal": 875, "source": 8, "pc": [ 964, @@ -3858,145 +3858,145 @@ ] }, { - "teal": 872, + "teal": 881, "source": 8, "pc": [ - 966 + 966, + 967 ] }, { - "teal": 873, + "teal": 882, "source": 8, "pc": [ - 967, 968, 969 ] }, { - "teal": 878, + "teal": 883, "source": 8, "pc": [ - 970, - 971 + 970 ] }, { - "teal": 879, + "teal": 884, "source": 8, "pc": [ - 972, - 973 + 971, + 972 ] }, { - "teal": 880, + "teal": 885, "source": 8, "pc": [ + 973, 974 ] }, { - "teal": 881, + "teal": 886, "source": 8, "pc": [ - 975, - 976 + 975 ] }, { "teal": 887, "source": 8, "pc": [ - 977, - 978 + 976, + 977 ] }, { "teal": 888, "source": 8, "pc": [ - 979, - 980 + 978 ] }, { "teal": 889, "source": 8, "pc": [ - 981 + 979 ] }, { "teal": 890, "source": 8, "pc": [ - 982, - 983 + 980, + 981, + 982 ] }, { - "teal": 891, + "teal": 898, "source": 8, "pc": [ - 984, - 985 + 983 ] }, { - "teal": 892, + "teal": 899, "source": 8, "pc": [ - 986 + 984 ] }, { - "teal": 893, + "teal": 900, "source": 8, "pc": [ - 987, - 988 + 985, + 986 ] }, { - "teal": 894, + "teal": 904, "source": 8, "pc": [ - 989 + 987, + 988 ] }, { - "teal": 895, + "teal": 905, "source": 8, "pc": [ + 989, 990 ] }, { - "teal": 896, + "teal": 909, "source": 8, "pc": [ 991, - 992, - 993 + 992 ] }, { - "teal": 904, + "teal": 910, "source": 8, "pc": [ + 993, 994 ] }, { - "teal": 905, + "teal": 913, "source": 8, "pc": [ 995 ] }, { - "teal": 906, + "teal": 914, "source": 8, "pc": [ 996, @@ -4004,75 +4004,75 @@ ] }, { - "teal": 910, + "teal": 917, "source": 8, "pc": [ - 998, - 999 + 998 ] }, { - "teal": 911, + "teal": 927, "source": 8, "pc": [ - 1000, - 1001 + 999 ] }, { - "teal": 915, + "teal": 928, "source": 8, "pc": [ - 1002, - 1003 + 1000 ] }, { - "teal": 916, + "teal": 929, "source": 8, "pc": [ - 1004, - 1005 + 1001, + 1002 ] }, { - "teal": 919, + "teal": 933, "source": 8, "pc": [ - 1006 + 1003, + 1004 ] }, { - "teal": 920, + "teal": 934, "source": 8, "pc": [ - 1007, - 1008 + 1005, + 1006 ] }, { - "teal": 923, + "teal": 938, "source": 8, "pc": [ - 1009 + 1007, + 1008 ] }, { - "teal": 933, + "teal": 939, "source": 8, "pc": [ + 1009, 1010 ] }, { - "teal": 934, + "teal": 943, "source": 8, "pc": [ 1011 ] }, { - "teal": 935, + "teal": 944, "source": 8, "pc": [ 1012, @@ -4080,7 +4080,7 @@ ] }, { - "teal": 939, + "teal": 948, "source": 8, "pc": [ 1014, @@ -4088,7 +4088,7 @@ ] }, { - "teal": 940, + "teal": 949, "source": 8, "pc": [ 1016, @@ -4096,7 +4096,7 @@ ] }, { - "teal": 944, + "teal": 950, "source": 8, "pc": [ 1018, @@ -4104,122 +4104,122 @@ ] }, { - "teal": 945, + "teal": 953, "source": 8, "pc": [ - 1020, - 1021 + 1020 ] }, { - "teal": 949, + "teal": 954, "source": 8, "pc": [ + 1021, 1022 ] }, { - "teal": 950, + "teal": 957, "source": 8, "pc": [ - 1023, - 1024 + 1023 ] }, { - "teal": 954, + "teal": 966, "source": 8, "pc": [ - 1025, - 1026 + 1024 ] }, { - "teal": 955, + "teal": 967, "source": 8, "pc": [ - 1027, - 1028 + 1025 ] }, { - "teal": 956, + "teal": 968, "source": 8, "pc": [ - 1029, - 1030 + 1026, + 1027 ] }, { - "teal": 959, + "teal": 972, "source": 8, "pc": [ - 1031 + 1028, + 1029 ] }, { - "teal": 960, + "teal": 973, "source": 8, "pc": [ - 1032, - 1033 + 1030, + 1031 ] }, { - "teal": 963, + "teal": 977, "source": 8, "pc": [ - 1034 + 1032, + 1033 ] }, { - "teal": 972, + "teal": 978, "source": 8, "pc": [ + 1034, 1035 ] }, { - "teal": 973, + "teal": 979, "source": 8, "pc": [ - 1036 + 1036, + 1037 ] }, { - "teal": 974, + "teal": 983, "source": 8, "pc": [ - 1037, - 1038 + 1038, + 1039 ] }, { - "teal": 978, + "teal": 984, "source": 8, "pc": [ - 1039, - 1040 + 1040, + 1041 ] }, { - "teal": 979, + "teal": 985, "source": 8, "pc": [ - 1041, - 1042 + 1042, + 1043 ] }, { - "teal": 983, + "teal": 988, "source": 8, "pc": [ - 1043, 1044 ] }, { - "teal": 984, + "teal": 989, "source": 8, "pc": [ 1045, @@ -4227,215 +4227,215 @@ ] }, { - "teal": 985, + "teal": 992, "source": 8, "pc": [ - 1047, - 1048 + 1047 ] }, { - "teal": 989, + "teal": 996, "source": 8, "pc": [ - 1049, - 1050 + 1048, + 1049 ] }, { - "teal": 990, + "teal": 1000, "source": 8, "pc": [ - 1051, - 1052 + 1050, + 1051 ] }, { - "teal": 991, + "teal": 1003, "source": 8, "pc": [ - 1053, - 1054 + 1052, + 1053 ] }, { - "teal": 994, + "teal": 1004, "source": 8, "pc": [ - 1055 + 1054 ] }, { - "teal": 995, + "teal": 1009, "source": 8, "pc": [ + 1055, 1056, 1057 ] }, { - "teal": 998, + "teal": 1010, "source": 8, "pc": [ 1058 ] }, { - "teal": 1002, + "teal": 1013, "source": 8, "pc": [ 1059, - 1060 + 1060, + 1061 ] }, { - "teal": 1006, + "teal": 1014, "source": 8, "pc": [ - 1061, 1062 ] }, { - "teal": 1009, + "teal": 1015, "source": 8, "pc": [ - 1063, - 1064 + 1063 ] }, { - "teal": 1010, + "teal": 1023, "source": 8, "pc": [ - 1065 + 1064, + 1065, + 1066 ] }, { - "teal": 1015, + "teal": 1026, "source": 8, "pc": [ - 1066, - 1067, - 1068 + 1067 ] }, { - "teal": 1016, + "teal": 1030, "source": 8, "pc": [ + 1068, 1069 ] }, { - "teal": 1019, + "teal": 1031, "source": 8, "pc": [ - 1070, - 1071, - 1072 + 1070 ] }, { - "teal": 1020, + "teal": 1032, "source": 8, "pc": [ - 1073 + 1071 ] }, { - "teal": 1021, + "teal": 1033, "source": 8, "pc": [ - 1074 + 1072, + 1073 ] }, { - "teal": 1029, + "teal": 1043, "source": 8, "pc": [ - 1075, - 1076, - 1077 + 1074 ] }, { - "teal": 1032, + "teal": 1044, "source": 8, "pc": [ - 1078 + 1075 ] }, { - "teal": 1036, + "teal": 1045, "source": 8, "pc": [ - 1079, - 1080 + 1076, + 1077 ] }, { - "teal": 1037, + "teal": 1049, "source": 8, "pc": [ - 1081 + 1078, + 1079 ] }, { - "teal": 1038, + "teal": 1050, "source": 8, "pc": [ - 1082 + 1080, + 1081 ] }, { - "teal": 1039, + "teal": 1054, "source": 8, "pc": [ - 1083, - 1084 + 1082, + 1083 ] }, { - "teal": 1049, + "teal": 1055, "source": 8, "pc": [ + 1084, 1085 ] }, { - "teal": 1050, + "teal": 1059, "source": 8, "pc": [ - 1086 + 1086, + 1087 ] }, { - "teal": 1051, + "teal": 1060, "source": 8, "pc": [ - 1087, - 1088 + 1088, + 1089 ] }, { - "teal": 1055, + "teal": 1061, "source": 8, "pc": [ - 1089, - 1090 + 1090, + 1091 ] }, { - "teal": 1056, + "teal": 1062, "source": 8, "pc": [ - 1091, 1092 ] }, { - "teal": 1060, + "teal": 1063, "source": 8, "pc": [ 1093, @@ -4443,7 +4443,7 @@ ] }, { - "teal": 1061, + "teal": 1067, "source": 8, "pc": [ 1095, @@ -4451,7 +4451,7 @@ ] }, { - "teal": 1065, + "teal": 1068, "source": 8, "pc": [ 1097, @@ -4459,7 +4459,7 @@ ] }, { - "teal": 1066, + "teal": 1072, "source": 8, "pc": [ 1099, @@ -4467,7 +4467,7 @@ ] }, { - "teal": 1067, + "teal": 1073, "source": 8, "pc": [ 1101, @@ -4475,14 +4475,14 @@ ] }, { - "teal": 1068, + "teal": 1076, "source": 8, "pc": [ 1103 ] }, { - "teal": 1069, + "teal": 1077, "source": 8, "pc": [ 1104, @@ -4490,91 +4490,91 @@ ] }, { - "teal": 1073, + "teal": 1080, "source": 8, "pc": [ - 1106, - 1107 + 1106 ] }, { - "teal": 1074, + "teal": 1088, "source": 8, "pc": [ - 1108, - 1109 + 1107 ] }, { - "teal": 1078, + "teal": 1089, "source": 8, "pc": [ - 1110, - 1111 + 1108 ] }, { - "teal": 1079, + "teal": 1090, "source": 8, "pc": [ - 1112, - 1113 + 1109, + 1110 ] }, { - "teal": 1082, + "teal": 1094, "source": 8, "pc": [ - 1114 + 1111, + 1112 ] }, { - "teal": 1083, + "teal": 1095, "source": 8, "pc": [ - 1115, - 1116 + 1113, + 1114 ] }, { - "teal": 1086, + "teal": 1099, "source": 8, "pc": [ - 1117 + 1115, + 1116 ] }, { - "teal": 1094, + "teal": 1100, "source": 8, "pc": [ + 1117, 1118 ] }, { - "teal": 1095, + "teal": 1104, "source": 8, "pc": [ - 1119 + 1119, + 1120 ] }, { - "teal": 1096, + "teal": 1105, "source": 8, "pc": [ - 1120, - 1121 + 1121, + 1122 ] }, { - "teal": 1100, + "teal": 1106, "source": 8, "pc": [ - 1122, 1123 ] }, { - "teal": 1101, + "teal": 1107, "source": 8, "pc": [ 1124, @@ -4582,7 +4582,7 @@ ] }, { - "teal": 1105, + "teal": 1108, "source": 8, "pc": [ 1126, @@ -4590,204 +4590,204 @@ ] }, { - "teal": 1106, + "teal": 1109, "source": 8, "pc": [ - 1128, - 1129 + 1128 ] }, { "teal": 1110, "source": 8, + "pc": [ + 1129 + ] + }, + { + "teal": 1111, + "source": 8, "pc": [ 1130, 1131 ] }, { - "teal": 1111, + "teal": 1114, "source": 8, "pc": [ - 1132, - 1133 + 1132 ] }, { - "teal": 1112, + "teal": 1115, "source": 8, "pc": [ + 1133, 1134 ] }, { - "teal": 1113, + "teal": 1118, "source": 8, "pc": [ - 1135, - 1136 + 1135 ] }, { - "teal": 1114, + "teal": 1119, "source": 8, "pc": [ - 1137, - 1138 + 1136 ] }, { - "teal": 1115, + "teal": 1124, "source": 8, "pc": [ + 1137, + 1138, 1139 ] }, { - "teal": 1116, + "teal": 1125, "source": 8, "pc": [ 1140 ] }, { - "teal": 1117, + "teal": 1128, "source": 8, "pc": [ 1141, - 1142 + 1142, + 1143 ] }, { - "teal": 1120, + "teal": 1129, "source": 8, "pc": [ - 1143 + 1144 ] }, { - "teal": 1121, + "teal": 1130, "source": 8, "pc": [ - 1144, 1145 ] }, { - "teal": 1124, + "teal": 1139, "source": 8, "pc": [ - 1146 + 1146, + 1147, + 1148 ] }, { - "teal": 1125, + "teal": 1142, "source": 8, "pc": [ - 1147 + 1149 ] }, { - "teal": 1130, + "teal": 1146, "source": 8, "pc": [ - 1148, - 1149, - 1150 + 1150, + 1151 ] }, { - "teal": 1131, + "teal": 1147, "source": 8, "pc": [ - 1151 + 1152 ] }, { - "teal": 1134, + "teal": 1148, "source": 8, "pc": [ - 1152, - 1153, - 1154 + 1153 ] }, { - "teal": 1135, + "teal": 1149, "source": 8, "pc": [ + 1154, 1155 ] }, { - "teal": 1136, + "teal": 1159, "source": 8, "pc": [ 1156 ] }, { - "teal": 1145, + "teal": 1160, "source": 8, "pc": [ - 1157, - 1158, - 1159 + 1157 ] }, { - "teal": 1148, + "teal": 1161, "source": 8, "pc": [ - 1160 + 1158, + 1159 ] }, { - "teal": 1152, + "teal": 1165, "source": 8, "pc": [ - 1161, - 1162 + 1160, + 1161 ] }, { - "teal": 1153, + "teal": 1166, "source": 8, "pc": [ + 1162, 1163 ] }, { - "teal": 1154, - "source": 8, - "pc": [ - 1164 - ] - }, - { - "teal": 1155, + "teal": 1170, "source": 8, "pc": [ - 1165, - 1166 + 1164, + 1165 ] }, { - "teal": 1165, + "teal": 1171, "source": 8, "pc": [ + 1166, 1167 ] }, { - "teal": 1166, + "teal": 1172, "source": 8, "pc": [ 1168 ] }, { - "teal": 1167, + "teal": 1173, "source": 8, "pc": [ 1169, @@ -4795,7 +4795,7 @@ ] }, { - "teal": 1171, + "teal": 1177, "source": 8, "pc": [ 1171, @@ -4803,7 +4803,7 @@ ] }, { - "teal": 1172, + "teal": 1178, "source": 8, "pc": [ 1173, @@ -4811,7 +4811,7 @@ ] }, { - "teal": 1176, + "teal": 1179, "source": 8, "pc": [ 1175, @@ -4819,22 +4819,22 @@ ] }, { - "teal": 1177, + "teal": 1180, "source": 8, "pc": [ - 1177, - 1178 + 1177 ] }, { - "teal": 1178, + "teal": 1181, "source": 8, "pc": [ + 1178, 1179 ] }, { - "teal": 1179, + "teal": 1185, "source": 8, "pc": [ 1180, @@ -4842,7 +4842,7 @@ ] }, { - "teal": 1183, + "teal": 1186, "source": 8, "pc": [ 1182, @@ -4850,7 +4850,7 @@ ] }, { - "teal": 1184, + "teal": 1190, "source": 8, "pc": [ 1184, @@ -4858,7 +4858,7 @@ ] }, { - "teal": 1185, + "teal": 1191, "source": 8, "pc": [ 1186, @@ -4866,14 +4866,14 @@ ] }, { - "teal": 1186, + "teal": 1192, "source": 8, "pc": [ 1188 ] }, { - "teal": 1187, + "teal": 1193, "source": 8, "pc": [ 1189, @@ -4881,106 +4881,106 @@ ] }, { - "teal": 1191, + "teal": 1196, "source": 8, "pc": [ - 1191, - 1192 + 1191 ] }, { - "teal": 1192, + "teal": 1197, "source": 8, "pc": [ - 1193, - 1194 + 1192, + 1193 ] }, { - "teal": 1196, + "teal": 1200, "source": 8, "pc": [ - 1195, - 1196 + 1194 ] }, { - "teal": 1197, + "teal": 1208, "source": 8, "pc": [ - 1197, - 1198 + 1195 ] }, { - "teal": 1198, + "teal": 1209, "source": 8, "pc": [ - 1199 + 1196 ] }, { - "teal": 1199, + "teal": 1210, "source": 8, "pc": [ - 1200, - 1201 + 1197, + 1198 ] }, { - "teal": 1202, + "teal": 1214, "source": 8, "pc": [ - 1202 + 1199, + 1200 ] }, { - "teal": 1203, + "teal": 1215, "source": 8, "pc": [ - 1203, - 1204 + 1201, + 1202 ] }, { - "teal": 1206, + "teal": 1219, "source": 8, "pc": [ - 1205 + 1203, + 1204 ] }, { - "teal": 1214, + "teal": 1220, "source": 8, "pc": [ + 1205, 1206 ] }, { - "teal": 1215, + "teal": 1224, "source": 8, "pc": [ - 1207 + 1207, + 1208 ] }, { - "teal": 1216, + "teal": 1225, "source": 8, "pc": [ - 1208, - 1209 + 1209, + 1210 ] }, { - "teal": 1220, + "teal": 1226, "source": 8, "pc": [ - 1210, 1211 ] }, { - "teal": 1221, + "teal": 1227, "source": 8, "pc": [ 1212, @@ -4988,7 +4988,7 @@ ] }, { - "teal": 1225, + "teal": 1228, "source": 8, "pc": [ 1214, @@ -4996,262 +4996,262 @@ ] }, { - "teal": 1226, + "teal": 1229, "source": 8, "pc": [ - 1216, - 1217 + 1216 ] }, { "teal": 1230, "source": 8, "pc": [ - 1218, - 1219 + 1217 ] }, { "teal": 1231, "source": 8, "pc": [ - 1220, - 1221 + 1218, + 1219 ] }, { - "teal": 1232, + "teal": 1234, "source": 8, "pc": [ - 1222 + 1220 ] }, { - "teal": 1233, + "teal": 1235, "source": 8, "pc": [ - 1223, - 1224 + 1221, + 1222 ] }, { - "teal": 1234, + "teal": 1238, "source": 8, "pc": [ - 1225, - 1226 + 1223 ] }, { - "teal": 1235, + "teal": 1239, "source": 8, "pc": [ - 1227 + 1224 ] }, { - "teal": 1236, + "teal": 1244, "source": 8, "pc": [ - 1228 + 1225 ] }, { - "teal": 1237, + "teal": 1247, "source": 8, "pc": [ - 1229, - 1230 + 1226, + 1227, + 1228 ] }, { - "teal": 1240, + "teal": 1248, "source": 8, "pc": [ - 1231 + 1229 ] }, { - "teal": 1241, + "teal": 1249, "source": 8, "pc": [ - 1232, - 1233 + 1230 ] }, { - "teal": 1244, + "teal": 1250, "source": 8, "pc": [ - 1234 + 1231 ] }, { - "teal": 1245, + "teal": 1251, "source": 8, "pc": [ - 1235 + 1232 ] }, { - "teal": 1250, + "teal": 1252, "source": 8, "pc": [ - 1236 + 1233 ] }, { - "teal": 1253, + "teal": 1255, "source": 8, "pc": [ - 1237, - 1238, - 1239 + 1234, + 1235, + 1236 ] }, { - "teal": 1254, + "teal": 1256, "source": 8, "pc": [ - 1240 + 1237 ] }, { - "teal": 1255, + "teal": 1257, "source": 8, "pc": [ - 1241 + 1238 ] }, { - "teal": 1256, + "teal": 1258, "source": 8, "pc": [ - 1242 + 1239 ] }, { - "teal": 1257, + "teal": 1259, "source": 8, "pc": [ - 1243 + 1240 ] }, { - "teal": 1258, + "teal": 1269, "source": 8, "pc": [ - 1244 + 1241, + 1242, + 1243 ] }, { - "teal": 1261, + "teal": 1273, "source": 8, "pc": [ - 1245, - 1246, - 1247 + 1244, + 1245 ] }, { - "teal": 1262, + "teal": 1274, "source": 8, "pc": [ - 1248 + 1246 ] }, { - "teal": 1263, + "teal": 1275, "source": 8, "pc": [ - 1249 + 1247 ] }, { - "teal": 1264, + "teal": 1276, "source": 8, "pc": [ - 1250 + 1248 ] }, { - "teal": 1265, + "teal": 1277, "source": 8, "pc": [ + 1249, + 1250, 1251 ] }, { - "teal": 1275, + "teal": 1278, "source": 8, "pc": [ 1252, - 1253, - 1254 + 1253 ] }, { "teal": 1279, "source": 8, "pc": [ - 1255, - 1256 + 1254 ] }, { "teal": 1280, "source": 8, "pc": [ - 1257 + 1255 ] }, { "teal": 1281, "source": 8, "pc": [ + 1256, + 1257, 1258 ] }, { - "teal": 1282, + "teal": 1284, "source": 8, "pc": [ - 1259 + 1259, + 1260 ] }, { - "teal": 1283, + "teal": 1287, "source": 8, "pc": [ - 1260, - 1261, - 1262 + 1261 ] }, { - "teal": 1284, + "teal": 1292, "source": 8, "pc": [ + 1262, 1263, 1264 ] }, { - "teal": 1285, + "teal": 1293, "source": 8, "pc": [ 1265 ] }, { - "teal": 1286, + "teal": 1294, "source": 8, "pc": [ 1266 ] }, { - "teal": 1287, + "teal": 1300, "source": 8, "pc": [ 1267, @@ -5260,61 +5260,67 @@ ] }, { - "teal": 1290, + "teal": 1303, "source": 8, "pc": [ - 1270, - 1271 + 1270 ] }, { - "teal": 1293, + "teal": 1307, "source": 8, "pc": [ + 1271, 1272 ] }, { - "teal": 1298, + "teal": 1308, "source": 8, "pc": [ - 1273, - 1274, - 1275 + 1273 ] }, { - "teal": 1299, + "teal": 1309, "source": 8, "pc": [ + 1274 + ] + }, + { + "teal": 1310, + "source": 8, + "pc": [ + 1275, 1276 ] }, { - "teal": 1300, + "teal": 1314, "source": 8, "pc": [ - 1277 + 1277, + 1278 ] }, { - "teal": 1306, + "teal": 1315, "source": 8, "pc": [ - 1278, 1279, 1280 ] }, { - "teal": 1309, + "teal": 1316, "source": 8, "pc": [ 1281 ] }, { - "teal": 1313, + "teal": 1317, "source": 8, "pc": [ 1282, @@ -5322,133 +5328,127 @@ ] }, { - "teal": 1314, - "source": 8, - "pc": [ - 1284 - ] - }, - { - "teal": 1315, + "teal": 1318, "source": 8, "pc": [ + 1284, 1285 ] }, { - "teal": 1316, + "teal": 1319, "source": 8, "pc": [ - 1286, - 1287 + 1286 ] }, { "teal": 1320, "source": 8, "pc": [ - 1288, - 1289 + 1287 ] }, { "teal": 1321, "source": 8, "pc": [ - 1290, - 1291 + 1288 ] }, { "teal": 1322, "source": 8, "pc": [ - 1292 + 1289 ] }, { "teal": 1323, "source": 8, "pc": [ - 1293, - 1294 + 1290 ] }, { - "teal": 1324, + "teal": 1331, "source": 8, "pc": [ - 1295, - 1296 + 1291 ] }, { - "teal": 1325, + "teal": 1332, "source": 8, "pc": [ - 1297 + 1292 ] }, { - "teal": 1326, + "teal": 1333, "source": 8, "pc": [ - 1298 + 1293, + 1294 ] }, { - "teal": 1327, + "teal": 1337, "source": 8, "pc": [ - 1299 + 1295, + 1296 ] }, { - "teal": 1328, + "teal": 1338, "source": 8, "pc": [ - 1300 + 1297, + 1298 ] }, { - "teal": 1329, + "teal": 1342, "source": 8, "pc": [ - 1301 + 1299, + 1300 ] }, { - "teal": 1337, + "teal": 1343, "source": 8, "pc": [ + 1301, 1302 ] }, { - "teal": 1338, + "teal": 1347, "source": 8, "pc": [ - 1303 + 1303, + 1304 ] }, { - "teal": 1339, + "teal": 1348, "source": 8, "pc": [ - 1304, - 1305 + 1305, + 1306 ] }, { - "teal": 1343, + "teal": 1349, "source": 8, "pc": [ - 1306, 1307 ] }, { - "teal": 1344, + "teal": 1350, "source": 8, "pc": [ 1308, @@ -5456,7 +5456,7 @@ ] }, { - "teal": 1348, + "teal": 1351, "source": 8, "pc": [ 1310, @@ -5464,398 +5464,351 @@ ] }, { - "teal": 1349, + "teal": 1352, "source": 8, "pc": [ - 1312, - 1313 + 1312 ] }, { "teal": 1353, "source": 8, "pc": [ - 1314, - 1315 + 1313 ] }, { "teal": 1354, "source": 8, "pc": [ - 1316, - 1317 + 1314, + 1315 ] }, { - "teal": 1355, + "teal": 1357, "source": 8, "pc": [ - 1318 + 1316 ] }, { - "teal": 1356, + "teal": 1358, "source": 8, "pc": [ - 1319, - 1320 + 1317, + 1318 ] }, { - "teal": 1357, + "teal": 1361, "source": 8, "pc": [ - 1321, - 1322 + 1319 ] }, { - "teal": 1358, + "teal": 1362, "source": 8, "pc": [ - 1323 + 1320 ] }, { - "teal": 1359, - "source": 8, + "teal": 1367, + "source": 4, "pc": [ - 1324 + 1321, + 1322, + 1323 ] }, { - "teal": 1360, - "source": 8, + "teal": 1368, + "source": 4, "pc": [ - 1325, - 1326 + 1324 ] }, { - "teal": 1363, - "source": 8, + "teal": 1369, + "source": 4, "pc": [ - 1327 + 1325 ] }, { - "teal": 1364, - "source": 8, + "teal": 1373, + "source": 4, "pc": [ - 1328, - 1329 + 1326, + 1327, + 1328 ] }, { - "teal": 1367, - "source": 8, + "teal": 1377, + "source": 5, "pc": [ + 1329, 1330 ] }, { - "teal": 1368, - "source": 8, - "pc": [ - 1331 - ] - }, - { - "teal": 1373, - "source": 4, + "teal": 1378, + "source": 5, "pc": [ + 1331, 1332, - 1333, - 1334 + 1333 ] }, { - "teal": 1374, - "source": 4, + "teal": 1379, + "source": 5, "pc": [ + 1334, 1335 ] }, { - "teal": 1375, - "source": 4, + "teal": 1380, + "source": 5, "pc": [ 1336 ] }, { - "teal": 1379, - "source": 4, - "pc": [ - 1337, - 1338, - 1339 - ] - }, - { - "teal": 1383, + "teal": 1381, "source": 5, "pc": [ - 1340, - 1341 + 1337 ] }, { - "teal": 1384, + "teal": 1382, "source": 5, "pc": [ - 1342, - 1343, - 1344 + 1338 ] }, { - "teal": 1385, - "source": 5, + "teal": 1383, + "source": 4, "pc": [ - 1345, - 1346 + 1339 ] }, { "teal": 1386, - "source": 5, + "source": 3, "pc": [ - 1347 + 1340, + 1341, + 1342, + 1343, + 1344, + 1345 ] }, { "teal": 1387, - "source": 5, + "source": 3, "pc": [ + 1346, + 1347, 1348 ] }, { "teal": 1388, - "source": 5, + "source": 3, "pc": [ - 1349 + 1349, + 1350, + 1351, + 1352 ] }, { "teal": 1389, - "source": 4, + "source": 3, "pc": [ - 1350 + 1353 ] }, { "teal": 1392, "source": 3, "pc": [ - 1351, - 1352, - 1353, 1354, 1355, - 1356 - ] - }, - { - "teal": 1393, - "source": 3, - "pc": [ + 1356, 1357, 1358, 1359 ] }, { - "teal": 1394, + "teal": 1393, "source": 3, "pc": [ 1360, 1361, 1362, - 1363 + 1363, + 1364, + 1365 ] }, { - "teal": 1395, - "source": 3, - "pc": [ - 1364 - ] - }, - { - "teal": 1398, + "teal": 1394, "source": 3, "pc": [ - 1365, 1366, 1367, 1368, 1369, - 1370 + 1370, + 1371 ] }, { - "teal": 1399, + "teal": 1395, "source": 3, "pc": [ - 1371, 1372, 1373, 1374, 1375, - 1376 + 1376, + 1377 ] }, { - "teal": 1400, + "teal": 1396, "source": 3, "pc": [ - 1377, 1378, 1379, 1380, 1381, - 1382 + 1382, + 1383 ] }, { - "teal": 1401, + "teal": 1397, "source": 3, "pc": [ - 1383, 1384, 1385, 1386, 1387, - 1388 + 1388, + 1389 ] }, { - "teal": 1402, + "teal": 1398, "source": 3, "pc": [ - 1389, 1390, 1391, 1392, 1393, - 1394 + 1394, + 1395 ] }, { - "teal": 1403, + "teal": 1399, "source": 3, "pc": [ - 1395, 1396, 1397, 1398, 1399, - 1400 + 1400, + 1401 ] }, { - "teal": 1404, + "teal": 1400, "source": 3, "pc": [ - 1401, 1402, 1403, - 1404, - 1405, - 1406 + 1404 ] }, { - "teal": 1405, + "teal": 1401, "source": 3, "pc": [ + 1405, + 1406, 1407, 1408, 1409, 1410, 1411, - 1412 - ] - }, - { - "teal": 1406, - "source": 3, - "pc": [ + 1412, 1413, 1414, - 1415 - ] - }, - { - "teal": 1407, - "source": 3, - "pc": [ + 1415, 1416, 1417, 1418, 1419, 1420, 1421, - 1422, - 1423, - 1424, - 1425, - 1426, - 1427, - 1428, - 1429, - 1430, - 1431, - 1432, - 1433 + 1422 ] }, { - "teal": 1408, + "teal": 1402, "source": 3, "pc": [ - 1434 + 1423 ] }, { - "teal": 1411, + "teal": 1405, "source": 3, "pc": [ - 1435, - 1436, - 1437, - 1438, - 1439, - 1440 + 1424, + 1425, + 1426, + 1427, + 1428, + 1429 ] }, { - "teal": 1412, + "teal": 1406, "source": 3, "pc": [ - 1441, - 1442, - 1443 + 1430, + 1431, + 1432 ] }, { - "teal": 1413, + "teal": 1407, "source": 3, "pc": [ - 1444, - 1445, - 1446, - 1447 + 1433, + 1434, + 1435, + 1436 ] }, { - "teal": 1414, + "teal": 1408, "source": 3, "pc": [ - 1448 + 1437 ] } ] \ 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 efc98ae42..77daa0261 100644 --- a/assets/arc-0059/contracts/clients/Arc59Client.ts +++ b/assets/arc-0059/contracts/clients/Arc59Client.ts @@ -103,7 +103,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICs9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgLSBhbGdvQ29uc3VtZWRCeUNsYWltCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgktCglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTkKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcyCgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzcKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA5CgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI3CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/clients/MutableARC59Client.ts b/assets/arc-0059/contracts/clients/MutableARC59Client.ts index 2be0e4a00..0a3ec641a 100644 --- a/assets/arc-0059/contracts/clients/MutableARC59Client.ts +++ b/assets/arc-0059/contracts/clients/MutableARC59Client.ts @@ -108,7 +108,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSArPSBhbGdvTmVlZGVkVG9DbGFpbSAtIHJlY2VpdmVyLmJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyAzIC8vIGFsZ29OZWVkZWRUb0NsYWltOiB1aW50NjQKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCS0KCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmMl9lbmQ6CgkvLyAqaWYzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA4CgkvLyAhcm91dGVyT3B0ZWRJbgoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJIQoJYnogKmlmM19lbmQKCgkvLyAqaWYzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOQoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEwCgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYzX2VuZDoKCS8vICppZjRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTMKCS8vICF0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCSEKCWJ6ICppZjRfZW5kCgoJLy8gKmlmNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTcKCS8vIGluZm8uaXR4bnMgKz0gNAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjAKCS8vIHByZU1CUiA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2J1cnkgNCAvLyBwcmVNQlI6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMQoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGdsb2JhbHMuemVyb0FkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZ2xvYmFsIFplcm9BZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIyCgkvLyBib3hNYnJEZWx0YSA9IGdsb2JhbHMuY3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcy5taW5CYWxhbmNlIC0gcHJlTUJSCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA0IC8vIHByZU1CUjogdWludDY0CgktCglmcmFtZV9idXJ5IDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMwoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5kZWxldGUoKQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZGVsCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI2CgkvLyBpbmZvLm1iciArPSBib3hNYnJEZWx0YSArIGdsb2JhbHMubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglmcmFtZV9kaWcgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjgKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJYiAqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm4KCippZjRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDYgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWY1X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTMzCgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTIgLy8gYXNzZXQ6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWY1X2VuZAoKCS8vICppZjVfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM1CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmNl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNwoJLy8gIShpbmJveC5iYWxhbmNlID49IGluYm94Lm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlKQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJPj0KCSEKCWJ6ICppZjZfZW5kCgoJLy8gKmlmNl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzkKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDIKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmNl9lbmQ6CgoqaWY1X2VuZDoKCS8vICppZjdfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNDcKCS8vIGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlICYmIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gIT09IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglkdXAKCWJ6ICpza2lwX2FuZDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWludCAwCgkhPQoJJiYKCipza2lwX2FuZDA6CglieiAqaWY3X2VuZAoKCS8vICppZjdfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUyCgkvLyBhbGdvQ29uc3VtZWRCeUNsYWltID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIChpbmZvLml0eG5zICsgNCkgKiBnbG9iYWxzLm1pblR4bkZlZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCA0CgkrCglnbG9iYWwgTWluVHhuRmVlCgkqCgkrCglmcmFtZV9idXJ5IDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTUzCgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0KCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTQKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU1CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1OQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzIKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3NwoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg0CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkxCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk0CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTUKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk4CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDkKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTIKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI2CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMyCgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQxCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ1CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDcKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcwCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc4CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkwCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTBfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5MF9lbmQKCip0ZXJuYXJ5MF9mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkwX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5OQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAwCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDIKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgdXBkYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgdXBkYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKdXBkYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCgkvLyBjb250cmFjdHMvbXV0YWJsZV9hcmM1OS5hbGdvLnRzOjUKCS8vIGFzc2VydCh0aGlzLnR4bi5zZW5kZXIgPT09IHRoaXMuYXBwLmNyZWF0b3IpCgl0eG4gU2VuZGVyCgl0eG5hIEFwcGxpY2F0aW9ucyAwCglhcHBfcGFyYW1zX2dldCBBcHBDcmVhdG9yCglwb3AKCT09Cglhc3NlcnQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJyCgoqY2FsbF9VcGRhdGVBcHBsaWNhdGlvbjoKCW1ldGhvZCAidXBkYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uCgllcnI=", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy9tdXRhYmxlX2FyYzU5LmFsZ28udHM6NQoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5hcHAuY3JlYXRvcikKCXR4biBTZW5kZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKCXBvcAoJPT0KCWFzc2VydAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { From 00b58acbdb57be06863e2586b2d858ed9184b429 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Wed, 30 Oct 2024 15:07:01 -0400 Subject: [PATCH 4/6] fix mutable testnet deploy script --- assets/arc-0059/deploy_scripts/mutable_testnet.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) 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]})`); From 4891b97c4bd31fcd232921ab884148c326799cb5 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Thu, 31 Oct 2024 14:18:18 -0400 Subject: [PATCH 5/6] fix: scenario that resulted in negative math in arc59GetSendAssetInfo --- assets/arc-0059/__test__/arc59.test.ts | 19 +- assets/arc-0059/contracts/arc59.algo.ts | 4 +- .../contracts/artifacts/ARC59.approval.teal | 173 +- .../contracts/artifacts/ARC59.arc32.json | 2 +- .../contracts/artifacts/ARC59.src_map.json | 2458 +++++++++-------- .../artifacts/MutableARC59.approval.teal | 173 +- .../artifacts/MutableARC59.arc32.json | 2 +- .../artifacts/MutableARC59.src_map.json | 1904 +++++++------ .../arc-0059/contracts/clients/Arc59Client.ts | 2 +- .../contracts/clients/MutableARC59Client.ts | 2 +- 10 files changed, 2550 insertions(+), 2189 deletions(-) diff --git a/assets/arc-0059/__test__/arc59.test.ts b/assets/arc-0059/__test__/arc59.test.ts index 4182260aa..1853b1c4c 100644 --- a/assets/arc-0059/__test__/arc59.test.ts +++ b/assets/arc-0059/__test__/arc59.test.ts @@ -19,7 +19,6 @@ algokit.Config.configure({ * @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, @@ -313,4 +312,22 @@ describe('Arc59', () => { 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 47dc1edec..a47f82e4d 100644 --- a/assets/arc-0059/contracts/arc59.algo.ts +++ b/assets/arc-0059/contracts/arc59.algo.ts @@ -150,7 +150,9 @@ export class ARC59 extends Contract { * 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; - const inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim; + let inboxAlgoAvailable = inbox.balance > inbox.minBalance ? inbox.balance - inbox.minBalance : 0; + inboxAlgoAvailable = inboxAlgoAvailable > algoConsumedByClaim ? inboxAlgoAvailable - algoConsumedByClaim : 0; + if (inboxAlgoAvailable < info.receiverAlgoNeededForClaim) { info.receiverAlgoNeededForClaim -= inboxAlgoAvailable; } diff --git a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal index 79eb4e34a..9db257d23 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal @@ -585,7 +585,15 @@ arc59_getSendAssetInfo: frame_bury 7 // algoConsumedByClaim: uint64 // contracts/arc59.algo.ts:153 - // inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim + // 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 @@ -593,12 +601,33 @@ arc59_getSendAssetInfo: 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:154 + // contracts/arc59.algo.ts:156 // inboxAlgoAvailable < info.receiverAlgoNeededForClaim frame_dig 8 // inboxAlgoAvailable: uint64 frame_dig 2 // info: SendAssetInfo @@ -610,7 +639,7 @@ arc59_getSendAssetInfo: bz *if8_end // *if8_consequent - // contracts/arc59.algo.ts:155 + // contracts/arc59.algo.ts:157 // info.receiverAlgoNeededForClaim -= inboxAlgoAvailable frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -630,7 +659,7 @@ arc59_getSendAssetInfo: *if8_end: *if7_end: - // contracts/arc59.algo.ts:159 + // contracts/arc59.algo.ts:161 // return info; frame_dig 2 // info: SendAssetInfo @@ -692,7 +721,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:172 + // contracts/arc59.algo.ts:174 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -704,7 +733,7 @@ arc59_sendAsset: assert // *if9_condition - // contracts/arc59.algo.ts:177 + // contracts/arc59.algo.ts:179 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -715,7 +744,7 @@ arc59_sendAsset: bz *if9_end // *if9_consequent - // contracts/arc59.algo.ts:178 + // contracts/arc59.algo.ts:180 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -725,18 +754,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:179 + // contracts/arc59.algo.ts:181 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:180 + // contracts/arc59.algo.ts:182 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:181 + // contracts/arc59.algo.ts:183 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -750,7 +779,7 @@ arc59_sendAsset: itxn_submit // *if10_condition - // contracts/arc59.algo.ts:184 + // contracts/arc59.algo.ts:186 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -758,7 +787,7 @@ arc59_sendAsset: bz *if10_end // *if10_consequent - // contracts/arc59.algo.ts:185 + // contracts/arc59.algo.ts:187 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -767,12 +796,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:186 + // contracts/arc59.algo.ts:188 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:187 + // contracts/arc59.algo.ts:189 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -785,13 +814,13 @@ arc59_sendAsset: itxn_submit *if10_end: - // contracts/arc59.algo.ts:191 + // contracts/arc59.algo.ts:193 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return *if9_end: - // contracts/arc59.algo.ts:194 + // contracts/arc59.algo.ts:196 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -799,14 +828,14 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:197 // inbox = this.arc59_getOrCreateInbox(receiver) frame_dig -2 // receiver: Address callsub arc59_getOrCreateInbox frame_bury 1 // inbox: address // *if11_condition - // contracts/arc59.algo.ts:197 + // contracts/arc59.algo.ts:199 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -814,7 +843,7 @@ arc59_sendAsset: bz *if11_end // *if11_consequent - // contracts/arc59.algo.ts:198 + // contracts/arc59.algo.ts:200 // sendPayment({ // receiver: inbox, // amount: additionalReceiverFunds, @@ -823,12 +852,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:199 + // contracts/arc59.algo.ts:201 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:200 + // contracts/arc59.algo.ts:202 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -842,7 +871,7 @@ arc59_sendAsset: *if11_end: // *if12_condition - // contracts/arc59.algo.ts:204 + // contracts/arc59.algo.ts:206 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -854,20 +883,20 @@ arc59_sendAsset: bz *if12_end // *if12_consequent - // contracts/arc59.algo.ts:205 + // contracts/arc59.algo.ts:207 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 // *if13_condition - // contracts/arc59.algo.ts:206 + // contracts/arc59.algo.ts:208 // !inboxExisted frame_dig 0 // inboxExisted: bool ! bz *if13_end // *if13_consequent - // contracts/arc59.algo.ts:206 + // contracts/arc59.algo.ts:208 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance @@ -876,7 +905,7 @@ arc59_sendAsset: *if13_end: // *if14_condition - // contracts/arc59.algo.ts:209 + // contracts/arc59.algo.ts:211 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -890,7 +919,7 @@ arc59_sendAsset: bz *if14_end // *if14_consequent - // contracts/arc59.algo.ts:210 + // contracts/arc59.algo.ts:212 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -899,12 +928,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:211 + // contracts/arc59.algo.ts:213 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:212 + // contracts/arc59.algo.ts:214 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -917,7 +946,7 @@ arc59_sendAsset: itxn_submit *if14_end: - // contracts/arc59.algo.ts:217 + // contracts/arc59.algo.ts:219 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -928,22 +957,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:218 + // contracts/arc59.algo.ts:220 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:219 + // contracts/arc59.algo.ts:221 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:220 + // contracts/arc59.algo.ts:222 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:221 + // contracts/arc59.algo.ts:223 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -957,7 +986,7 @@ arc59_sendAsset: itxn_submit *if12_end: - // contracts/arc59.algo.ts:226 + // contracts/arc59.algo.ts:228 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -967,18 +996,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:227 + // contracts/arc59.algo.ts:229 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:228 + // contracts/arc59.algo.ts:230 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:231 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -991,7 +1020,7 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:232 + // contracts/arc59.algo.ts:234 // return inbox; frame_dig 1 // inbox: address @@ -1025,14 +1054,14 @@ arc59_claim: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:241 + // 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:243 + // contracts/arc59.algo.ts:245 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -1044,17 +1073,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:244 + // contracts/arc59.algo.ts:246 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:245 + // contracts/arc59.algo.ts:247 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:246 + // contracts/arc59.algo.ts:248 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1062,12 +1091,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:247 + // contracts/arc59.algo.ts:249 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:248 + // contracts/arc59.algo.ts:250 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -1079,7 +1108,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:251 + // contracts/arc59.algo.ts:253 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1089,17 +1118,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:252 + // contracts/arc59.algo.ts:254 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:253 + // contracts/arc59.algo.ts:255 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:254 + // contracts/arc59.algo.ts:256 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1141,14 +1170,14 @@ arc59_reject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:265 + // 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:267 + // contracts/arc59.algo.ts:269 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1160,19 +1189,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:268 + // contracts/arc59.algo.ts:270 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:269 + // 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:270 + // contracts/arc59.algo.ts:272 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1180,12 +1209,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:271 + // contracts/arc59.algo.ts:273 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:272 + // contracts/arc59.algo.ts:274 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1199,7 +1228,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:275 + // contracts/arc59.algo.ts:277 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1209,17 +1238,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:276 + // contracts/arc59.algo.ts:278 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:277 + // contracts/arc59.algo.ts:279 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:278 + // contracts/arc59.algo.ts:280 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1268,22 +1297,22 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:290 + // 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 @@ -1302,14 +1331,14 @@ arc59_claimAlgo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:295 + // 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:297 + // contracts/arc59.algo.ts:299 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1322,7 +1351,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:299 + // contracts/arc59.algo.ts:301 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1332,17 +1361,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:300 + // contracts/arc59.algo.ts:302 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:301 + // contracts/arc59.algo.ts:303 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:302 + // contracts/arc59.algo.ts:304 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json index 5a0c83a86..14c9d204c 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json @@ -74,7 +74,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgLSBhbGdvQ29uc3VtZWRCeUNsYWltCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgktCglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTkKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcyCgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzcKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA5CgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI3CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json index 269000a3e..a7aff61dc 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json @@ -2822,1112 +2822,1106 @@ "source": 153, "pc": [ 736, - 737 + 737, + 738 ] }, { "teal": 597, "source": 153, "pc": [ - 738 + 739, + 740 ] }, { "teal": 598, "source": 153, "pc": [ - 739, - 740 + 741, + 742 ] }, { - "teal": 603, - "source": 154, + "teal": 599, + "source": 153, "pc": [ - 741, - 742 + 743 ] }, { - "teal": 604, - "source": 154, + "teal": 600, + "source": 153, "pc": [ - 743, - 744 + 744, + 745 ] }, { - "teal": 605, - "source": 154, + "teal": 601, + "source": 153, "pc": [ - 745, - 746 + 746, + 747 ] }, { - "teal": 606, - "source": 154, + "teal": 602, + "source": 153, "pc": [ - 747, 748 ] }, { - "teal": 607, - "source": 154, + "teal": 603, + "source": 153, "pc": [ - 749, - 750, - 751 + 749 ] }, { - "teal": 608, - "source": 154, + "teal": 604, + "source": 153, "pc": [ + 750, + 751, 752 ] }, { - "teal": 609, - "source": 154, + "teal": 607, + "source": 153, "pc": [ 753 ] }, { "teal": 610, - "source": 154, + "source": 153, "pc": [ 754, - 755, - 756 + 755 + ] + }, + { + "teal": 614, + "source": 154, + "pc": [ + 756, + 757 ] }, { "teal": 615, - "source": 155, + "source": 154, "pc": [ - 757, - 758 + 758, + 759 ] }, { "teal": 616, - "source": 155, + "source": 154, "pc": [ - 759, 760 ] }, { "teal": 617, - "source": 155, + "source": 154, "pc": [ 761, - 762 + 762, + 763 ] }, { "teal": 618, - "source": 155, + "source": 154, "pc": [ - 763, - 764 + 764, + 765 ] }, { "teal": 619, - "source": 155, + "source": 154, "pc": [ - 765, - 766 + 766, + 767 ] }, { "teal": 620, - "source": 155, + "source": 154, "pc": [ - 767, 768 ] }, { "teal": 621, - "source": 155, + "source": 154, "pc": [ 769, - 770 + 770, + 771 ] }, { - "teal": 622, - "source": 155, + "teal": 624, + "source": 154, "pc": [ - 771, - 772, - 773 + 772 ] }, { - "teal": 623, - "source": 155, + "teal": 627, + "source": 154, "pc": [ + 773, 774 ] }, { - "teal": 624, - "source": 155, + "teal": 632, + "source": 156, "pc": [ 775, 776 ] }, { - "teal": 625, - "source": 155, - "pc": [ - 777 - ] - }, - { - "teal": 626, - "source": 155, + "teal": 633, + "source": 156, "pc": [ + 777, 778 ] }, { - "teal": 627, - "source": 155, - "pc": [ - 779 - ] - }, - { - "teal": 628, - "source": 155, + "teal": 634, + "source": 156, "pc": [ - 780, - 781 + 779, + 780 ] }, { "teal": 635, - "source": 159, + "source": 156, "pc": [ - 782, - 783 + 781, + 782 ] }, { - "teal": 639, - "source": 86, + "teal": 636, + "source": 156, "pc": [ + 783, 784, 785 ] }, { - "teal": 642, - "source": 86, + "teal": 637, + "source": 156, "pc": [ - 786, - 787 + 786 ] }, { - "teal": 643, - "source": 86, + "teal": 638, + "source": 156, "pc": [ - 788 + 787 ] }, { - "teal": 648, - "source": 171, + "teal": 639, + "source": 156, "pc": [ - 789 + 788, + 789, + 790 ] }, { - "teal": 651, - "source": 171, + "teal": 644, + "source": 157, "pc": [ - 790, 791, 792 ] }, { - "teal": 652, - "source": 171, + "teal": 645, + "source": 157, "pc": [ - 793 + 793, + 794 ] }, { - "teal": 655, - "source": 171, + "teal": 646, + "source": 157, "pc": [ - 794, 795, 796 ] }, { - "teal": 656, - "source": 171, - "pc": [ - 797 - ] - }, - { - "teal": 657, - "source": 171, + "teal": 647, + "source": 157, "pc": [ + 797, 798 ] }, { - "teal": 658, - "source": 171, - "pc": [ - 799 - ] - }, - { - "teal": 659, - "source": 171, + "teal": 648, + "source": 157, "pc": [ + 799, 800 ] }, { - "teal": 660, - "source": 171, - "pc": [ - 801 - ] - }, - { - "teal": 663, - "source": 171, + "teal": 649, + "source": 157, "pc": [ - 802, - 803 + 801, + 802 ] }, { - "teal": 664, - "source": 171, + "teal": 650, + "source": 157, "pc": [ + 803, 804 ] }, { - "teal": 665, - "source": 171, - "pc": [ - 805 - ] - }, - { - "teal": 666, - "source": 171, + "teal": 651, + "source": 157, "pc": [ - 806 + 805, + 806, + 807 ] }, { - "teal": 667, - "source": 171, + "teal": 652, + "source": 157, "pc": [ - 807, 808 ] }, { - "teal": 668, - "source": 171, - "pc": [ - 809 - ] - }, - { - "teal": 669, - "source": 171, + "teal": 653, + "source": 157, "pc": [ + 809, 810 ] }, { - "teal": 670, - "source": 171, + "teal": 654, + "source": 157, "pc": [ 811 ] }, { - "teal": 673, - "source": 171, + "teal": 655, + "source": 157, "pc": [ - 812, - 813, - 814 + 812 ] }, { - "teal": 674, - "source": 171, + "teal": 656, + "source": 157, "pc": [ - 815 + 813 ] }, { - "teal": 675, - "source": 171, + "teal": 657, + "source": 157, "pc": [ - 816 + 814, + 815 ] }, { - "teal": 676, - "source": 171, + "teal": 664, + "source": 161, "pc": [ + 816, 817 ] }, { - "teal": 677, - "source": 171, + "teal": 668, + "source": 86, "pc": [ - 818 + 818, + 819 ] }, { - "teal": 689, - "source": 171, + "teal": 671, + "source": 86, "pc": [ - 819, 820, 821 ] }, { - "teal": 692, - "source": 171, + "teal": 672, + "source": 86, "pc": [ 822 ] }, { - "teal": 693, - "source": 171, + "teal": 677, + "source": 173, "pc": [ - 823, - 824 + 823 ] }, { - "teal": 700, - "source": 172, + "teal": 680, + "source": 173, "pc": [ + 824, 825, 826 ] }, { - "teal": 701, + "teal": 681, "source": 173, "pc": [ - 827, - 828 + 827 ] }, { - "teal": 702, + "teal": 684, "source": 173, "pc": [ + 828, 829, 830 ] }, { - "teal": 703, + "teal": 685, "source": 173, "pc": [ 831 ] }, { - "teal": 704, + "teal": 686, "source": 173, "pc": [ 832 ] }, { - "teal": 709, - "source": 177, + "teal": 687, + "source": 173, + "pc": [ + 833 + ] + }, + { + "teal": 688, + "source": 173, "pc": [ - 833, 834 ] }, { - "teal": 710, - "source": 177, + "teal": 689, + "source": 173, + "pc": [ + 835 + ] + }, + { + "teal": 692, + "source": 173, "pc": [ - 835, - 836 + 836, + 837 ] }, { - "teal": 711, - "source": 177, + "teal": 693, + "source": 173, "pc": [ - 837, 838 ] }, { - "teal": 712, - "source": 177, + "teal": 694, + "source": 173, "pc": [ - 839, - 840 + 839 ] }, { - "teal": 713, - "source": 177, + "teal": 695, + "source": 173, "pc": [ - 841 + 840 ] }, { - "teal": 714, - "source": 177, + "teal": 696, + "source": 173, "pc": [ + 841, 842 ] }, { - "teal": 715, - "source": 177, + "teal": 697, + "source": 173, "pc": [ - 843, - 844, - 845 + 843 + ] + }, + { + "teal": 698, + "source": 173, + "pc": [ + 844 ] }, { - "teal": 724, - "source": 178, + "teal": 699, + "source": 173, "pc": [ - 846 + 845 ] }, { - "teal": 725, - "source": 178, + "teal": 702, + "source": 173, "pc": [ - 847 + 846, + 847, + 848 ] }, { - "teal": 726, - "source": 178, + "teal": 703, + "source": 173, "pc": [ - 848, 849 ] }, { - "teal": 730, - "source": 179, + "teal": 704, + "source": 173, + "pc": [ + 850 + ] + }, + { + "teal": 705, + "source": 173, "pc": [ - 850, 851 ] }, { - "teal": 731, - "source": 179, + "teal": 706, + "source": 173, "pc": [ - 852, - 853 + 852 ] }, { - "teal": 735, - "source": 180, + "teal": 718, + "source": 173, "pc": [ + 853, 854, 855 ] }, { - "teal": 736, - "source": 180, + "teal": 721, + "source": 173, "pc": [ - 856, - 857 + 856 ] }, { - "teal": 737, - "source": 180, + "teal": 722, + "source": 173, "pc": [ - 858, - 859 + 857, + 858 ] }, { - "teal": 741, - "source": 181, + "teal": 729, + "source": 174, "pc": [ - 860, - 861 + 859, + 860 ] }, { - "teal": 742, - "source": 181, + "teal": 730, + "source": 175, "pc": [ - 862, - 863 + 861, + 862 ] }, { - "teal": 743, - "source": 181, + "teal": 731, + "source": 175, "pc": [ - 864, - 865 + 863, + 864 ] }, { - "teal": 746, - "source": 178, + "teal": 732, + "source": 175, "pc": [ - 866 + 865 ] }, { - "teal": 747, - "source": 178, + "teal": 733, + "source": 175, "pc": [ - 867, - 868 + 866 ] }, { - "teal": 750, - "source": 178, + "teal": 738, + "source": 179, "pc": [ - 869 + 867, + 868 ] }, { - "teal": 755, - "source": 184, + "teal": 739, + "source": 179, "pc": [ - 870, - 871 + 869, + 870 ] }, { - "teal": 756, - "source": 184, + "teal": 740, + "source": 179, "pc": [ + 871, 872 ] }, { - "teal": 757, - "source": 184, + "teal": 741, + "source": 179, "pc": [ - 873 + 873, + 874 ] }, { - "teal": 758, - "source": 184, + "teal": 742, + "source": 179, "pc": [ - 874, - 875, - 876 + 875 ] }, { - "teal": 766, - "source": 185, + "teal": 743, + "source": 179, "pc": [ - 877 + 876 ] }, { - "teal": 767, - "source": 185, + "teal": 744, + "source": 179, "pc": [ - 878 + 877, + 878, + 879 ] }, { - "teal": 768, - "source": 185, + "teal": 753, + "source": 180, "pc": [ - 879, 880 ] }, { - "teal": 772, - "source": 186, + "teal": 754, + "source": 180, "pc": [ - 881, - 882 + 881 ] }, { - "teal": 773, - "source": 186, + "teal": 755, + "source": 180, "pc": [ - 883, - 884 + 882, + 883 ] }, { - "teal": 777, - "source": 187, + "teal": 759, + "source": 181, "pc": [ - 885, - 886 + 884, + 885 ] }, { - "teal": 778, - "source": 187, + "teal": 760, + "source": 181, "pc": [ - 887, - 888 + 886, + 887 ] }, { - "teal": 781, - "source": 185, + "teal": 764, + "source": 182, "pc": [ + 888, 889 ] }, { - "teal": 782, - "source": 185, + "teal": 765, + "source": 182, "pc": [ 890, 891 ] }, { - "teal": 785, - "source": 185, + "teal": 766, + "source": 182, "pc": [ - 892 + 892, + 893 ] }, { - "teal": 790, - "source": 191, + "teal": 770, + "source": 183, "pc": [ - 893, - 894 + 894, + 895 ] }, { - "teal": 791, - "source": 191, + "teal": 771, + "source": 183, "pc": [ - 895, 896, 897 ] }, { - "teal": 796, - "source": 194, + "teal": 772, + "source": 183, "pc": [ 898, 899 ] }, { - "teal": 797, - "source": 194, + "teal": 775, + "source": 180, "pc": [ 900 ] }, { - "teal": 798, - "source": 194, + "teal": 776, + "source": 180, "pc": [ - 901 + 901, + 902 ] }, { - "teal": 799, - "source": 194, + "teal": 779, + "source": 180, "pc": [ - 902 + 903 ] }, { - "teal": 800, - "source": 194, + "teal": 784, + "source": 186, "pc": [ - 903, - 904 + 904, + 905 ] }, { - "teal": 804, - "source": 195, + "teal": 785, + "source": 186, "pc": [ - 905, 906 ] }, { - "teal": 805, - "source": 195, + "teal": 786, + "source": 186, + "pc": [ + 907 + ] + }, + { + "teal": 787, + "source": 186, "pc": [ - 907, 908, - 909 + 909, + 910 ] }, { - "teal": 806, - "source": 195, + "teal": 795, + "source": 187, "pc": [ - 910, 911 ] }, { - "teal": 811, - "source": 197, + "teal": 796, + "source": 187, "pc": [ - 912, - 913 + 912 ] }, { - "teal": 812, - "source": 197, + "teal": 797, + "source": 187, "pc": [ + 913, 914 ] }, { - "teal": 813, - "source": 197, + "teal": 801, + "source": 188, "pc": [ - 915 + 915, + 916 ] }, { - "teal": 814, - "source": 197, + "teal": 802, + "source": 188, "pc": [ - 916, 917, 918 ] }, { - "teal": 822, - "source": 198, - "pc": [ - 919 - ] - }, - { - "teal": 823, - "source": 198, + "teal": 806, + "source": 189, "pc": [ + 919, 920 ] }, { - "teal": 824, - "source": 198, + "teal": 807, + "source": 189, "pc": [ 921, 922 ] }, { - "teal": 828, - "source": 199, + "teal": 810, + "source": 187, "pc": [ - 923, - 924 + 923 ] }, { - "teal": 829, - "source": 199, + "teal": 811, + "source": 187, "pc": [ - 925, - 926 + 924, + 925 ] }, { - "teal": 833, - "source": 200, + "teal": 814, + "source": 187, "pc": [ - 927, - 928 + 926 ] }, { - "teal": 834, - "source": 200, + "teal": 819, + "source": 193, "pc": [ - 929, - 930 + 927, + 928 ] }, { - "teal": 837, - "source": 198, + "teal": 820, + "source": 193, "pc": [ + 929, + 930, 931 ] }, { - "teal": 838, - "source": 198, + "teal": 825, + "source": 196, "pc": [ 932, 933 ] }, { - "teal": 841, - "source": 198, + "teal": 826, + "source": 196, "pc": [ 934 ] }, { - "teal": 847, - "source": 204, + "teal": 827, + "source": 196, + "pc": [ + 935 + ] + }, + { + "teal": 828, + "source": 196, "pc": [ - 935, 936 ] }, { - "teal": 848, - "source": 204, + "teal": 829, + "source": 196, "pc": [ 937, 938 ] }, { - "teal": 849, - "source": 204, + "teal": 833, + "source": 197, "pc": [ 939, 940 ] }, { - "teal": 850, - "source": 204, + "teal": 834, + "source": 197, "pc": [ 941, - 942 - ] - }, - { - "teal": 851, - "source": 204, - "pc": [ + 942, 943 ] }, { - "teal": 852, - "source": 204, + "teal": 835, + "source": 197, "pc": [ - 944 + 944, + 945 ] }, { - "teal": 853, - "source": 204, + "teal": 840, + "source": 199, "pc": [ - 945 + 946, + 947 ] }, { - "teal": 854, - "source": 204, + "teal": 841, + "source": 199, "pc": [ - 946, - 947, 948 ] }, { - "teal": 859, - "source": 205, + "teal": 842, + "source": 199, "pc": [ - 949, - 950 + 949 ] }, { - "teal": 860, - "source": 205, + "teal": 843, + "source": 199, "pc": [ + 950, 951, 952 ] }, { - "teal": 865, - "source": 206, + "teal": 851, + "source": 200, + "pc": [ + 953 + ] + }, + { + "teal": 852, + "source": 200, "pc": [ - 953, 954 ] }, { - "teal": 866, - "source": 206, + "teal": 853, + "source": 200, "pc": [ - 955 + 955, + 956 ] }, { - "teal": 867, - "source": 206, + "teal": 857, + "source": 201, "pc": [ - 956, 957, 958 ] }, { - "teal": 872, - "source": 206, + "teal": 858, + "source": 201, "pc": [ 959, 960 ] }, { - "teal": 873, - "source": 206, + "teal": 862, + "source": 202, "pc": [ 961, 962 ] }, { - "teal": 874, - "source": 206, + "teal": 863, + "source": 202, "pc": [ - 963 + 963, + 964 ] }, { - "teal": 875, - "source": 206, + "teal": 866, + "source": 200, "pc": [ - 964, 965 ] }, { - "teal": 881, - "source": 209, + "teal": 867, + "source": 200, "pc": [ 966, 967 ] }, { - "teal": 882, - "source": 209, + "teal": 870, + "source": 200, "pc": [ - 968, - 969 + 968 ] }, { - "teal": 883, - "source": 209, + "teal": 876, + "source": 206, "pc": [ + 969, 970 ] }, { - "teal": 884, - "source": 209, + "teal": 877, + "source": 206, "pc": [ 971, 972 ] }, { - "teal": 885, - "source": 209, + "teal": 878, + "source": 206, "pc": [ 973, 974 ] }, { - "teal": 886, - "source": 209, + "teal": 879, + "source": 206, "pc": [ - 975 + 975, + 976 ] }, { - "teal": 887, - "source": 209, + "teal": 880, + "source": 206, "pc": [ - 976, 977 ] }, { - "teal": 888, - "source": 209, + "teal": 881, + "source": 206, "pc": [ 978 ] }, { - "teal": 889, - "source": 209, + "teal": 882, + "source": 206, "pc": [ 979 ] }, { - "teal": 890, - "source": 209, + "teal": 883, + "source": 206, "pc": [ 980, 981, @@ -3935,1757 +3929,1905 @@ ] }, { - "teal": 898, - "source": 210, - "pc": [ - 983 - ] - }, - { - "teal": 899, - "source": 210, + "teal": 888, + "source": 207, "pc": [ + 983, 984 ] }, { - "teal": 900, - "source": 210, + "teal": 889, + "source": 207, "pc": [ 985, 986 ] }, { - "teal": 904, - "source": 211, + "teal": 894, + "source": 208, "pc": [ 987, 988 ] }, { - "teal": 905, - "source": 211, + "teal": 895, + "source": 208, "pc": [ - 989, - 990 + 989 ] }, { - "teal": 909, - "source": 212, + "teal": 896, + "source": 208, "pc": [ + 990, 991, 992 ] }, { - "teal": 910, - "source": 212, + "teal": 901, + "source": 208, "pc": [ 993, 994 ] }, { - "teal": 913, - "source": 210, + "teal": 902, + "source": 208, "pc": [ - 995 + 995, + 996 ] }, { - "teal": 914, - "source": 210, + "teal": 903, + "source": 208, "pc": [ - 996, 997 ] }, { - "teal": 917, - "source": 210, - "pc": [ - 998 - ] - }, - { - "teal": 927, - "source": 217, + "teal": 904, + "source": 208, "pc": [ + 998, 999 ] }, { - "teal": 928, - "source": 217, + "teal": 910, + "source": 211, "pc": [ - 1000 + 1000, + 1001 ] }, { - "teal": 929, - "source": 217, + "teal": 911, + "source": 211, "pc": [ - 1001, - 1002 + 1002, + 1003 ] }, { - "teal": 933, - "source": 218, + "teal": 912, + "source": 211, "pc": [ - 1003, 1004 ] }, { - "teal": 934, - "source": 218, + "teal": 913, + "source": 211, "pc": [ 1005, 1006 ] }, { - "teal": 938, - "source": 219, + "teal": 914, + "source": 211, "pc": [ 1007, 1008 ] }, { - "teal": 939, - "source": 219, + "teal": 915, + "source": 211, "pc": [ - 1009, - 1010 + 1009 ] }, { - "teal": 943, - "source": 220, + "teal": 916, + "source": 211, "pc": [ + 1010, 1011 ] }, { - "teal": 944, - "source": 220, + "teal": 917, + "source": 211, + "pc": [ + 1012 + ] + }, + { + "teal": 918, + "source": 211, "pc": [ - 1012, 1013 ] }, { - "teal": 948, - "source": 221, + "teal": 919, + "source": 211, "pc": [ 1014, - 1015 + 1015, + 1016 ] }, { - "teal": 949, - "source": 221, + "teal": 927, + "source": 212, "pc": [ - 1016, 1017 ] }, { - "teal": 950, - "source": 221, + "teal": 928, + "source": 212, "pc": [ - 1018, - 1019 + 1018 ] }, { - "teal": 953, - "source": 217, + "teal": 929, + "source": 212, "pc": [ + 1019, 1020 ] }, { - "teal": 954, - "source": 217, + "teal": 933, + "source": 213, "pc": [ 1021, 1022 ] }, { - "teal": 957, - "source": 217, - "pc": [ - 1023 - ] - }, - { - "teal": 966, - "source": 226, + "teal": 934, + "source": 213, "pc": [ + 1023, 1024 ] }, { - "teal": 967, - "source": 226, + "teal": 938, + "source": 214, "pc": [ - 1025 + 1025, + 1026 ] }, { - "teal": 968, - "source": 226, + "teal": 939, + "source": 214, "pc": [ - 1026, - 1027 + 1027, + 1028 ] }, { - "teal": 972, - "source": 227, + "teal": 942, + "source": 212, "pc": [ - 1028, 1029 ] }, { - "teal": 973, - "source": 227, + "teal": 943, + "source": 212, "pc": [ 1030, 1031 ] }, { - "teal": 977, - "source": 228, + "teal": 946, + "source": 212, + "pc": [ + 1032 + ] + }, + { + "teal": 956, + "source": 219, "pc": [ - 1032, 1033 ] }, { - "teal": 978, - "source": 228, + "teal": 957, + "source": 219, "pc": [ - 1034, - 1035 + 1034 ] }, { - "teal": 979, - "source": 228, + "teal": 958, + "source": 219, "pc": [ - 1036, - 1037 + 1035, + 1036 ] }, { - "teal": 983, - "source": 229, + "teal": 962, + "source": 220, "pc": [ - 1038, - 1039 + 1037, + 1038 ] }, { - "teal": 984, - "source": 229, + "teal": 963, + "source": 220, "pc": [ - 1040, - 1041 + 1039, + 1040 ] }, { - "teal": 985, - "source": 229, + "teal": 967, + "source": 221, "pc": [ - 1042, - 1043 + 1041, + 1042 ] }, { - "teal": 988, - "source": 226, + "teal": 968, + "source": 221, "pc": [ + 1043, 1044 ] }, { - "teal": 989, - "source": 226, + "teal": 972, + "source": 222, "pc": [ - 1045, - 1046 + 1045 ] }, { - "teal": 992, - "source": 226, + "teal": 973, + "source": 222, "pc": [ + 1046, 1047 ] }, { - "teal": 996, - "source": 232, + "teal": 977, + "source": 223, "pc": [ 1048, 1049 ] }, { - "teal": 1000, - "source": 171, + "teal": 978, + "source": 223, "pc": [ 1050, 1051 ] }, { - "teal": 1003, - "source": 171, + "teal": 979, + "source": 223, "pc": [ 1052, 1053 ] }, { - "teal": 1004, - "source": 171, + "teal": 982, + "source": 219, "pc": [ 1054 ] }, { - "teal": 1009, - "source": 240, + "teal": 983, + "source": 219, "pc": [ 1055, - 1056, + 1056 + ] + }, + { + "teal": 986, + "source": 219, + "pc": [ 1057 ] }, { - "teal": 1010, - "source": 240, + "teal": 995, + "source": 228, "pc": [ 1058 ] }, { - "teal": 1013, - "source": 240, + "teal": 996, + "source": 228, "pc": [ - 1059, - 1060, - 1061 + 1059 ] }, { - "teal": 1014, - "source": 240, + "teal": 997, + "source": 228, "pc": [ - 1062 + 1060, + 1061 ] }, { - "teal": 1015, - "source": 240, + "teal": 1001, + "source": 229, "pc": [ + 1062, 1063 ] }, { - "teal": 1023, - "source": 240, + "teal": 1002, + "source": 229, "pc": [ 1064, - 1065, - 1066 + 1065 ] }, { - "teal": 1026, - "source": 240, + "teal": 1006, + "source": 230, "pc": [ + 1066, 1067 ] }, { - "teal": 1030, - "source": 241, + "teal": 1007, + "source": 230, "pc": [ 1068, 1069 ] }, { - "teal": 1031, - "source": 241, - "pc": [ - 1070 - ] - }, - { - "teal": 1032, - "source": 241, + "teal": 1008, + "source": 230, "pc": [ + 1070, 1071 ] }, { - "teal": 1033, - "source": 241, + "teal": 1012, + "source": 231, "pc": [ 1072, 1073 ] }, { - "teal": 1043, - "source": 243, + "teal": 1013, + "source": 231, "pc": [ - 1074 + 1074, + 1075 ] }, { - "teal": 1044, - "source": 243, + "teal": 1014, + "source": 231, "pc": [ - 1075 + 1076, + 1077 ] }, { - "teal": 1045, - "source": 243, + "teal": 1017, + "source": 228, "pc": [ - 1076, - 1077 + 1078 ] }, { - "teal": 1049, - "source": 244, + "teal": 1018, + "source": 228, "pc": [ - 1078, - 1079 + 1079, + 1080 ] }, { - "teal": 1050, - "source": 244, + "teal": 1021, + "source": 228, "pc": [ - 1080, 1081 ] }, { - "teal": 1054, - "source": 245, + "teal": 1025, + "source": 234, "pc": [ 1082, 1083 ] }, { - "teal": 1055, - "source": 245, + "teal": 1029, + "source": 173, "pc": [ 1084, 1085 ] }, { - "teal": 1059, - "source": 246, + "teal": 1032, + "source": 173, "pc": [ 1086, 1087 ] }, { - "teal": 1060, - "source": 246, + "teal": 1033, + "source": 173, "pc": [ - 1088, - 1089 + 1088 ] }, { - "teal": 1061, - "source": 246, + "teal": 1038, + "source": 242, "pc": [ + 1089, 1090, 1091 ] }, { - "teal": 1062, - "source": 246, + "teal": 1039, + "source": 242, "pc": [ 1092 ] }, { - "teal": 1063, - "source": 246, + "teal": 1042, + "source": 242, "pc": [ 1093, - 1094 + 1094, + 1095 ] }, { - "teal": 1067, - "source": 247, + "teal": 1043, + "source": 242, "pc": [ - 1095, 1096 ] }, { - "teal": 1068, - "source": 247, + "teal": 1044, + "source": 242, "pc": [ - 1097, - 1098 + 1097 ] }, { - "teal": 1072, - "source": 248, + "teal": 1052, + "source": 242, "pc": [ + 1098, 1099, 1100 ] }, { - "teal": 1073, - "source": 248, + "teal": 1055, + "source": 242, "pc": [ - 1101, - 1102 + 1101 ] }, { - "teal": 1076, + "teal": 1059, "source": 243, "pc": [ + 1102, 1103 ] }, { - "teal": 1077, + "teal": 1060, "source": 243, "pc": [ - 1104, - 1105 + 1104 ] }, { - "teal": 1080, + "teal": 1061, "source": 243, "pc": [ - 1106 + 1105 ] }, { - "teal": 1088, - "source": 251, + "teal": 1062, + "source": 243, "pc": [ + 1106, 1107 ] }, { - "teal": 1089, - "source": 251, + "teal": 1072, + "source": 245, "pc": [ 1108 ] }, { - "teal": 1090, - "source": 251, + "teal": 1073, + "source": 245, "pc": [ - 1109, - 1110 + 1109 ] }, { - "teal": 1094, - "source": 252, + "teal": 1074, + "source": 245, "pc": [ - 1111, - 1112 + 1110, + 1111 ] }, { - "teal": 1095, - "source": 252, + "teal": 1078, + "source": 246, "pc": [ - 1113, - 1114 + 1112, + 1113 ] }, { - "teal": 1099, - "source": 253, + "teal": 1079, + "source": 246, "pc": [ - 1115, - 1116 + 1114, + 1115 ] }, { - "teal": 1100, - "source": 253, + "teal": 1083, + "source": 247, "pc": [ - 1117, - 1118 + 1116, + 1117 ] }, { - "teal": 1104, - "source": 254, + "teal": 1084, + "source": 247, "pc": [ - 1119, - 1120 + 1118, + 1119 ] }, { - "teal": 1105, - "source": 254, + "teal": 1088, + "source": 248, "pc": [ - 1121, - 1122 + 1120, + 1121 ] }, { - "teal": 1106, - "source": 254, + "teal": 1089, + "source": 248, "pc": [ + 1122, 1123 ] }, { - "teal": 1107, - "source": 254, + "teal": 1090, + "source": 248, "pc": [ 1124, 1125 ] }, { - "teal": 1108, - "source": 254, + "teal": 1091, + "source": 248, "pc": [ - 1126, - 1127 + 1126 ] }, { - "teal": 1109, - "source": 254, + "teal": 1092, + "source": 248, "pc": [ + 1127, 1128 ] }, { - "teal": 1110, - "source": 254, - "pc": [ - 1129 - ] - }, - { - "teal": 1111, - "source": 254, + "teal": 1096, + "source": 249, "pc": [ - 1130, - 1131 + 1129, + 1130 ] }, { - "teal": 1114, - "source": 251, + "teal": 1097, + "source": 249, "pc": [ + 1131, 1132 ] }, { - "teal": 1115, - "source": 251, + "teal": 1101, + "source": 250, "pc": [ 1133, 1134 ] }, { - "teal": 1118, - "source": 251, + "teal": 1102, + "source": 250, "pc": [ - 1135 + 1135, + 1136 ] }, { - "teal": 1119, - "source": 240, + "teal": 1105, + "source": 245, "pc": [ - 1136 + 1137 ] }, { - "teal": 1124, - "source": 264, + "teal": 1106, + "source": 245, "pc": [ - 1137, 1138, 1139 ] }, { - "teal": 1125, - "source": 264, + "teal": 1109, + "source": 245, "pc": [ 1140 ] }, { - "teal": 1128, - "source": 264, + "teal": 1117, + "source": 253, "pc": [ - 1141, - 1142, - 1143 + 1141 ] }, { - "teal": 1129, - "source": 264, + "teal": 1118, + "source": 253, "pc": [ - 1144 + 1142 ] }, { - "teal": 1130, - "source": 264, + "teal": 1119, + "source": 253, "pc": [ - 1145 + 1143, + 1144 ] }, { - "teal": 1139, - "source": 264, + "teal": 1123, + "source": 254, "pc": [ - 1146, - 1147, - 1148 + 1145, + 1146 ] }, { - "teal": 1142, - "source": 264, + "teal": 1124, + "source": 254, "pc": [ - 1149 + 1147, + 1148 ] }, { - "teal": 1146, - "source": 265, + "teal": 1128, + "source": 255, "pc": [ - 1150, - 1151 + 1149, + 1150 ] }, { - "teal": 1147, - "source": 265, + "teal": 1129, + "source": 255, "pc": [ + 1151, 1152 ] }, { - "teal": 1148, - "source": 265, - "pc": [ - 1153 - ] - }, - { - "teal": 1149, - "source": 265, + "teal": 1133, + "source": 256, "pc": [ - 1154, - 1155 + 1153, + 1154 ] }, { - "teal": 1159, - "source": 267, + "teal": 1134, + "source": 256, "pc": [ + 1155, 1156 ] }, { - "teal": 1160, - "source": 267, + "teal": 1135, + "source": 256, "pc": [ 1157 ] }, { - "teal": 1161, - "source": 267, + "teal": 1136, + "source": 256, "pc": [ 1158, 1159 ] }, { - "teal": 1165, - "source": 268, + "teal": 1137, + "source": 256, "pc": [ 1160, 1161 ] }, { - "teal": 1166, - "source": 268, + "teal": 1138, + "source": 256, + "pc": [ + 1162 + ] + }, + { + "teal": 1139, + "source": 256, "pc": [ - 1162, 1163 ] }, { - "teal": 1170, - "source": 269, + "teal": 1140, + "source": 256, "pc": [ 1164, 1165 ] }, { - "teal": 1171, - "source": 269, + "teal": 1143, + "source": 253, "pc": [ - 1166, - 1167 + 1166 ] }, { - "teal": 1172, - "source": 269, + "teal": 1144, + "source": 253, "pc": [ + 1167, 1168 ] }, { - "teal": 1173, - "source": 269, + "teal": 1147, + "source": 253, + "pc": [ + 1169 + ] + }, + { + "teal": 1148, + "source": 242, "pc": [ - 1169, 1170 ] }, { - "teal": 1177, - "source": 270, + "teal": 1153, + "source": 266, "pc": [ 1171, - 1172 + 1172, + 1173 ] }, { - "teal": 1178, - "source": 270, + "teal": 1154, + "source": 266, "pc": [ - 1173, 1174 ] }, { - "teal": 1179, - "source": 270, + "teal": 1157, + "source": 266, "pc": [ 1175, - 1176 + 1176, + 1177 ] }, { - "teal": 1180, - "source": 270, + "teal": 1158, + "source": 266, "pc": [ - 1177 + 1178 ] }, { - "teal": 1181, - "source": 270, + "teal": 1159, + "source": 266, "pc": [ - 1178, 1179 ] }, { - "teal": 1185, - "source": 271, + "teal": 1168, + "source": 266, "pc": [ 1180, - 1181 + 1181, + 1182 ] }, { - "teal": 1186, - "source": 271, + "teal": 1171, + "source": 266, "pc": [ - 1182, 1183 ] }, { - "teal": 1190, - "source": 272, + "teal": 1175, + "source": 267, "pc": [ 1184, 1185 ] }, { - "teal": 1191, - "source": 272, + "teal": 1176, + "source": 267, + "pc": [ + 1186 + ] + }, + { + "teal": 1177, + "source": 267, "pc": [ - 1186, 1187 ] }, { - "teal": 1192, - "source": 272, + "teal": 1178, + "source": 267, "pc": [ - 1188 + 1188, + 1189 ] }, { - "teal": 1193, - "source": 272, + "teal": 1188, + "source": 269, "pc": [ - 1189, 1190 ] }, { - "teal": 1196, - "source": 267, + "teal": 1189, + "source": 269, "pc": [ 1191 ] }, { - "teal": 1197, - "source": 267, + "teal": 1190, + "source": 269, "pc": [ 1192, 1193 ] }, { - "teal": 1200, - "source": 267, - "pc": [ - 1194 - ] - }, - { - "teal": 1208, - "source": 275, + "teal": 1194, + "source": 270, "pc": [ + 1194, 1195 ] }, { - "teal": 1209, - "source": 275, + "teal": 1195, + "source": 270, "pc": [ - 1196 + 1196, + 1197 ] }, { - "teal": 1210, - "source": 275, + "teal": 1199, + "source": 271, "pc": [ - 1197, - 1198 + 1198, + 1199 ] }, { - "teal": 1214, - "source": 276, + "teal": 1200, + "source": 271, "pc": [ - 1199, - 1200 + 1200, + 1201 ] }, { - "teal": 1215, - "source": 276, + "teal": 1201, + "source": 271, "pc": [ - 1201, 1202 ] }, { - "teal": 1219, - "source": 277, + "teal": 1202, + "source": 271, "pc": [ 1203, 1204 ] }, { - "teal": 1220, - "source": 277, + "teal": 1206, + "source": 272, "pc": [ 1205, 1206 ] }, { - "teal": 1224, - "source": 278, + "teal": 1207, + "source": 272, "pc": [ 1207, 1208 ] }, { - "teal": 1225, - "source": 278, + "teal": 1208, + "source": 272, "pc": [ 1209, 1210 ] }, { - "teal": 1226, - "source": 278, + "teal": 1209, + "source": 272, "pc": [ 1211 ] }, { - "teal": 1227, - "source": 278, + "teal": 1210, + "source": 272, "pc": [ 1212, 1213 ] }, { - "teal": 1228, - "source": 278, + "teal": 1214, + "source": 273, "pc": [ 1214, 1215 ] }, { - "teal": 1229, - "source": 278, - "pc": [ - 1216 - ] - }, - { - "teal": 1230, - "source": 278, + "teal": 1215, + "source": 273, "pc": [ + 1216, 1217 ] }, { - "teal": 1231, - "source": 278, + "teal": 1219, + "source": 274, "pc": [ 1218, 1219 ] }, { - "teal": 1234, - "source": 275, + "teal": 1220, + "source": 274, "pc": [ - 1220 + 1220, + 1221 ] }, { - "teal": 1235, - "source": 275, + "teal": 1221, + "source": 274, "pc": [ - 1221, 1222 ] }, { - "teal": 1238, - "source": 275, - "pc": [ - 1223 - ] - }, - { - "teal": 1239, - "source": 264, + "teal": 1222, + "source": 274, "pc": [ + 1223, 1224 ] }, { - "teal": 1244, - "source": 289, + "teal": 1225, + "source": 269, "pc": [ 1225 ] }, { - "teal": 1247, - "source": 289, + "teal": 1226, + "source": 269, "pc": [ 1226, - 1227, - 1228 + 1227 ] }, { - "teal": 1248, - "source": 289, + "teal": 1229, + "source": 269, "pc": [ - 1229 + 1228 ] }, { - "teal": 1249, - "source": 289, + "teal": 1237, + "source": 277, "pc": [ - 1230 + 1229 ] }, { - "teal": 1250, - "source": 289, + "teal": 1238, + "source": 277, "pc": [ - 1231 + 1230 ] }, { - "teal": 1251, - "source": 289, + "teal": 1239, + "source": 277, "pc": [ + 1231, 1232 ] }, { - "teal": 1252, - "source": 289, + "teal": 1243, + "source": 278, "pc": [ - 1233 + 1233, + 1234 ] }, { - "teal": 1255, - "source": 289, + "teal": 1244, + "source": 278, "pc": [ - 1234, 1235, 1236 ] }, { - "teal": 1256, - "source": 289, - "pc": [ - 1237 - ] - }, - { - "teal": 1257, - "source": 289, + "teal": 1248, + "source": 279, "pc": [ + 1237, 1238 ] }, { - "teal": 1258, - "source": 289, + "teal": 1249, + "source": 279, "pc": [ - 1239 + 1239, + 1240 ] }, { - "teal": 1259, - "source": 289, + "teal": 1253, + "source": 280, "pc": [ - 1240 + 1241, + 1242 ] }, { - "teal": 1269, - "source": 289, + "teal": 1254, + "source": 280, "pc": [ - 1241, - 1242, - 1243 + 1243, + 1244 ] }, { - "teal": 1273, - "source": 290, + "teal": 1255, + "source": 280, "pc": [ - 1244, 1245 ] }, { - "teal": 1274, - "source": 290, + "teal": 1256, + "source": 280, "pc": [ - 1246 + 1246, + 1247 ] }, { - "teal": 1275, - "source": 290, + "teal": 1257, + "source": 280, "pc": [ - 1247 + 1248, + 1249 ] }, { - "teal": 1276, - "source": 290, + "teal": 1258, + "source": 280, "pc": [ - 1248 + 1250 ] }, { - "teal": 1277, - "source": 290, + "teal": 1259, + "source": 280, "pc": [ - 1249, - 1250, 1251 ] }, { - "teal": 1278, - "source": 290, + "teal": 1260, + "source": 280, "pc": [ 1252, 1253 ] }, { - "teal": 1279, - "source": 290, + "teal": 1263, + "source": 277, "pc": [ 1254 ] }, { - "teal": 1280, - "source": 290, + "teal": 1264, + "source": 277, "pc": [ - 1255 + 1255, + 1256 ] }, { - "teal": 1281, - "source": 290, + "teal": 1267, + "source": 277, + "pc": [ + 1257 + ] + }, + { + "teal": 1268, + "source": 266, "pc": [ - 1256, - 1257, 1258 ] }, { - "teal": 1284, - "source": 290, + "teal": 1273, + "source": 291, "pc": [ - 1259, - 1260 + 1259 ] }, { - "teal": 1287, - "source": 289, + "teal": 1276, + "source": 291, + "pc": [ + 1260, + 1261, + 1262 + ] + }, + { + "teal": 1277, + "source": 291, "pc": [ - 1261 + 1263 ] }, { - "teal": 1292, - "source": 294, + "teal": 1278, + "source": 291, "pc": [ - 1262, - 1263, 1264 ] }, { - "teal": 1293, - "source": 294, + "teal": 1279, + "source": 291, "pc": [ 1265 ] }, { - "teal": 1294, - "source": 294, + "teal": 1280, + "source": 291, "pc": [ 1266 ] }, { - "teal": 1300, - "source": 294, + "teal": 1281, + "source": 291, "pc": [ - 1267, - 1268, - 1269 + 1267 ] }, { - "teal": 1303, - "source": 294, + "teal": 1284, + "source": 291, "pc": [ + 1268, + 1269, 1270 ] }, { - "teal": 1307, - "source": 295, + "teal": 1285, + "source": 291, + "pc": [ + 1271 + ] + }, + { + "teal": 1286, + "source": 291, "pc": [ - 1271, 1272 ] }, { - "teal": 1308, - "source": 295, + "teal": 1287, + "source": 291, "pc": [ 1273 ] }, { - "teal": 1309, - "source": 295, + "teal": 1288, + "source": 291, "pc": [ 1274 ] }, { - "teal": 1310, - "source": 295, + "teal": 1298, + "source": 291, "pc": [ 1275, - 1276 + 1276, + 1277 ] }, { - "teal": 1314, - "source": 297, + "teal": 1302, + "source": 292, "pc": [ - 1277, - 1278 + 1278, + 1279 ] }, { - "teal": 1315, - "source": 297, + "teal": 1303, + "source": 292, "pc": [ - 1279, 1280 ] }, { - "teal": 1316, - "source": 297, + "teal": 1304, + "source": 292, "pc": [ 1281 ] }, { - "teal": 1317, - "source": 297, + "teal": 1305, + "source": 292, "pc": [ - 1282, - 1283 + 1282 ] }, { - "teal": 1318, - "source": 297, + "teal": 1306, + "source": 292, "pc": [ + 1283, 1284, 1285 ] }, { - "teal": 1319, - "source": 297, - "pc": [ - 1286 - ] - }, - { - "teal": 1320, - "source": 297, + "teal": 1307, + "source": 292, "pc": [ + 1286, 1287 ] }, { - "teal": 1321, - "source": 297, + "teal": 1308, + "source": 292, "pc": [ 1288 ] }, { - "teal": 1322, - "source": 297, + "teal": 1309, + "source": 292, "pc": [ 1289 ] }, { - "teal": 1323, - "source": 297, - "pc": [ - 1290 - ] - }, - { - "teal": 1331, - "source": 299, - "pc": [ - 1291 - ] - }, - { - "teal": 1332, - "source": 299, + "teal": 1310, + "source": 292, "pc": [ + 1290, + 1291, 1292 ] }, { - "teal": 1333, - "source": 299, + "teal": 1313, + "source": 292, "pc": [ 1293, 1294 ] }, { - "teal": 1337, - "source": 300, + "teal": 1316, + "source": 291, "pc": [ - 1295, - 1296 + 1295 ] }, { - "teal": 1338, - "source": 300, + "teal": 1321, + "source": 296, "pc": [ + 1296, 1297, 1298 ] }, { - "teal": 1342, - "source": 301, + "teal": 1322, + "source": 296, + "pc": [ + 1299 + ] + }, + { + "teal": 1323, + "source": 296, "pc": [ - 1299, 1300 ] }, { - "teal": 1343, - "source": 301, + "teal": 1329, + "source": 296, "pc": [ 1301, - 1302 + 1302, + 1303 ] }, { - "teal": 1347, - "source": 302, + "teal": 1332, + "source": 296, "pc": [ - 1303, 1304 ] }, { - "teal": 1348, - "source": 302, + "teal": 1336, + "source": 297, "pc": [ 1305, 1306 ] }, { - "teal": 1349, - "source": 302, + "teal": 1337, + "source": 297, "pc": [ 1307 ] }, { - "teal": 1350, - "source": 302, + "teal": 1338, + "source": 297, "pc": [ - 1308, - 1309 + 1308 ] }, { - "teal": 1351, - "source": 302, + "teal": 1339, + "source": 297, "pc": [ - 1310, - 1311 + 1309, + 1310 ] }, { - "teal": 1352, - "source": 302, + "teal": 1343, + "source": 299, "pc": [ + 1311, 1312 ] }, { - "teal": 1353, - "source": 302, + "teal": 1344, + "source": 299, "pc": [ - 1313 + 1313, + 1314 ] }, { - "teal": 1354, - "source": 302, + "teal": 1345, + "source": 299, "pc": [ - 1314, 1315 ] }, { - "teal": 1357, + "teal": 1346, "source": 299, "pc": [ - 1316 + 1316, + 1317 ] }, { - "teal": 1358, + "teal": 1347, "source": 299, "pc": [ - 1317, - 1318 + 1318, + 1319 ] }, { - "teal": 1361, + "teal": 1348, "source": 299, "pc": [ - 1319 + 1320 ] }, { - "teal": 1362, - "source": 294, + "teal": 1349, + "source": 299, "pc": [ - 1320 + 1321 ] }, { - "teal": 1365, - "source": 35, + "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": [ - 1321, - 1322, - 1323, - 1324, - 1325, 1326 ] }, { - "teal": 1366, - "source": 35, + "teal": 1362, + "source": 301, "pc": [ 1327, - 1328, - 1329 + 1328 + ] + }, + { + "teal": 1366, + "source": 302, + "pc": [ + 1329, + 1330 ] }, { "teal": 1367, - "source": 35, + "source": 302, "pc": [ - 1330, 1331, - 1332, - 1333 + 1332 ] }, { - "teal": 1368, - "source": 35, + "teal": 1371, + "source": 303, "pc": [ + 1333, 1334 ] }, { - "teal": 1371, - "source": 35, + "teal": 1372, + "source": 303, "pc": [ 1335, - 1336, + 1336 + ] + }, + { + "teal": 1376, + "source": 304, + "pc": [ 1337, - 1338, + 1338 + ] + }, + { + "teal": 1377, + "source": 304, + "pc": [ 1339, 1340 ] }, { - "teal": 1372, - "source": 35, + "teal": 1378, + "source": 304, + "pc": [ + 1341 + ] + }, + { + "teal": 1379, + "source": 304, "pc": [ - 1341, 1342, - 1343, + 1343 + ] + }, + { + "teal": 1380, + "source": 304, + "pc": [ 1344, - 1345, + 1345 + ] + }, + { + "teal": 1381, + "source": 304, + "pc": [ 1346 ] }, { - "teal": 1373, - "source": 35, + "teal": 1382, + "source": 304, + "pc": [ + 1347 + ] + }, + { + "teal": 1383, + "source": 304, "pc": [ - 1347, 1348, - 1349, - 1350, + 1349 + ] + }, + { + "teal": 1386, + "source": 301, + "pc": [ + 1350 + ] + }, + { + "teal": 1387, + "source": 301, + "pc": [ 1351, 1352 ] }, { - "teal": 1374, + "teal": 1390, + "source": 301, + "pc": [ + 1353 + ] + }, + { + "teal": 1391, + "source": 296, + "pc": [ + 1354 + ] + }, + { + "teal": 1394, "source": 35, "pc": [ - 1353, - 1354, 1355, 1356, 1357, - 1358 + 1358, + 1359, + 1360 ] }, { - "teal": 1375, + "teal": 1395, "source": 35, "pc": [ - 1359, - 1360, 1361, 1362, - 1363, - 1364 + 1363 ] }, { - "teal": 1376, + "teal": 1396, "source": 35, "pc": [ + 1364, 1365, 1366, - 1367, - 1368, - 1369, - 1370 + 1367 ] }, { - "teal": 1377, + "teal": 1397, + "source": 35, + "pc": [ + 1368 + ] + }, + { + "teal": 1400, "source": 35, "pc": [ + 1369, + 1370, 1371, 1372, 1373, - 1374, - 1375, - 1376 + 1374 ] }, { - "teal": 1378, + "teal": 1401, "source": 35, "pc": [ + 1375, + 1376, 1377, 1378, 1379, - 1380, - 1381, - 1382 + 1380 ] }, { - "teal": 1379, + "teal": 1402, "source": 35, "pc": [ + 1381, + 1382, 1383, 1384, - 1385 + 1385, + 1386 ] }, { - "teal": 1380, + "teal": 1403, "source": 35, "pc": [ - 1386, 1387, 1388, 1389, 1390, 1391, - 1392, + 1392 + ] + }, + { + "teal": 1404, + "source": 35, + "pc": [ 1393, 1394, 1395, 1396, 1397, - 1398, + 1398 + ] + }, + { + "teal": 1405, + "source": 35, + "pc": [ 1399, 1400, 1401, 1402, - 1403 + 1403, + 1404 ] }, { - "teal": 1381, + "teal": 1406, "source": 35, "pc": [ - 1404 + 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": [ + 1438 ] } ] \ No newline at end of file diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal index d30799a86..c28b95f74 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal @@ -585,7 +585,15 @@ arc59_getSendAssetInfo: frame_bury 7 // algoConsumedByClaim: uint64 // contracts/arc59.algo.ts:153 - // inboxAlgoAvailable = inbox.balance - inbox.minBalance - algoConsumedByClaim + // 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 @@ -593,12 +601,33 @@ arc59_getSendAssetInfo: 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:154 + // contracts/arc59.algo.ts:156 // inboxAlgoAvailable < info.receiverAlgoNeededForClaim frame_dig 8 // inboxAlgoAvailable: uint64 frame_dig 2 // info: SendAssetInfo @@ -610,7 +639,7 @@ arc59_getSendAssetInfo: bz *if8_end // *if8_consequent - // contracts/arc59.algo.ts:155 + // contracts/arc59.algo.ts:157 // info.receiverAlgoNeededForClaim -= inboxAlgoAvailable frame_dig 2 // info: SendAssetInfo store 255 // full array @@ -630,7 +659,7 @@ arc59_getSendAssetInfo: *if8_end: *if7_end: - // contracts/arc59.algo.ts:159 + // contracts/arc59.algo.ts:161 // return info; frame_dig 2 // info: SendAssetInfo @@ -692,7 +721,7 @@ arc59_sendAsset: byte 0x dupn 2 - // contracts/arc59.algo.ts:172 + // contracts/arc59.algo.ts:174 // verifyAssetTransferTxn(axfer, { // assetReceiver: this.app.address, // }) @@ -704,7 +733,7 @@ arc59_sendAsset: assert // *if9_condition - // contracts/arc59.algo.ts:177 + // contracts/arc59.algo.ts:179 // receiver.isOptedInToAsset(axfer.xferAsset) frame_dig -2 // receiver: Address frame_dig -1 // axfer: AssetTransferTxn @@ -715,7 +744,7 @@ arc59_sendAsset: bz *if9_end // *if9_consequent - // contracts/arc59.algo.ts:178 + // contracts/arc59.algo.ts:180 // sendAssetTransfer({ // assetReceiver: receiver, // assetAmount: axfer.assetAmount, @@ -725,18 +754,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:179 + // contracts/arc59.algo.ts:181 // assetReceiver: receiver frame_dig -2 // receiver: Address itxn_field AssetReceiver - // contracts/arc59.algo.ts:180 + // contracts/arc59.algo.ts:182 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:181 + // contracts/arc59.algo.ts:183 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -750,7 +779,7 @@ arc59_sendAsset: itxn_submit // *if10_condition - // contracts/arc59.algo.ts:184 + // contracts/arc59.algo.ts:186 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -758,7 +787,7 @@ arc59_sendAsset: bz *if10_end // *if10_consequent - // contracts/arc59.algo.ts:185 + // contracts/arc59.algo.ts:187 // sendPayment({ // receiver: receiver, // amount: additionalReceiverFunds, @@ -767,12 +796,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:186 + // contracts/arc59.algo.ts:188 // receiver: receiver frame_dig -2 // receiver: Address itxn_field Receiver - // contracts/arc59.algo.ts:187 + // contracts/arc59.algo.ts:189 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -785,13 +814,13 @@ arc59_sendAsset: itxn_submit *if10_end: - // contracts/arc59.algo.ts:191 + // contracts/arc59.algo.ts:193 // return receiver; frame_dig -2 // receiver: Address b *arc59_sendAsset*return *if9_end: - // contracts/arc59.algo.ts:194 + // contracts/arc59.algo.ts:196 // inboxExisted = this.inboxes(receiver).exists frame_dig -2 // receiver: Address box_len @@ -799,14 +828,14 @@ arc59_sendAsset: pop frame_bury 0 // inboxExisted: bool - // contracts/arc59.algo.ts:195 + // contracts/arc59.algo.ts:197 // inbox = this.arc59_getOrCreateInbox(receiver) frame_dig -2 // receiver: Address callsub arc59_getOrCreateInbox frame_bury 1 // inbox: address // *if11_condition - // contracts/arc59.algo.ts:197 + // contracts/arc59.algo.ts:199 // additionalReceiverFunds !== 0 frame_dig -3 // additionalReceiverFunds: uint64 int 0 @@ -814,7 +843,7 @@ arc59_sendAsset: bz *if11_end // *if11_consequent - // contracts/arc59.algo.ts:198 + // contracts/arc59.algo.ts:200 // sendPayment({ // receiver: inbox, // amount: additionalReceiverFunds, @@ -823,12 +852,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:199 + // contracts/arc59.algo.ts:201 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:200 + // contracts/arc59.algo.ts:202 // amount: additionalReceiverFunds frame_dig -3 // additionalReceiverFunds: uint64 itxn_field Amount @@ -842,7 +871,7 @@ arc59_sendAsset: *if11_end: // *if12_condition - // contracts/arc59.algo.ts:204 + // contracts/arc59.algo.ts:206 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -854,20 +883,20 @@ arc59_sendAsset: bz *if12_end // *if12_consequent - // contracts/arc59.algo.ts:205 + // contracts/arc59.algo.ts:207 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 // *if13_condition - // contracts/arc59.algo.ts:206 + // contracts/arc59.algo.ts:208 // !inboxExisted frame_dig 0 // inboxExisted: bool ! bz *if13_end // *if13_consequent - // contracts/arc59.algo.ts:206 + // contracts/arc59.algo.ts:208 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance @@ -876,7 +905,7 @@ arc59_sendAsset: *if13_end: // *if14_condition - // contracts/arc59.algo.ts:209 + // contracts/arc59.algo.ts:211 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -890,7 +919,7 @@ arc59_sendAsset: bz *if14_end // *if14_consequent - // contracts/arc59.algo.ts:210 + // contracts/arc59.algo.ts:212 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -899,12 +928,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:211 + // contracts/arc59.algo.ts:213 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:212 + // contracts/arc59.algo.ts:214 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -917,7 +946,7 @@ arc59_sendAsset: itxn_submit *if14_end: - // contracts/arc59.algo.ts:217 + // contracts/arc59.algo.ts:219 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -928,22 +957,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:218 + // contracts/arc59.algo.ts:220 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:219 + // contracts/arc59.algo.ts:221 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:220 + // contracts/arc59.algo.ts:222 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:221 + // contracts/arc59.algo.ts:223 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -957,7 +986,7 @@ arc59_sendAsset: itxn_submit *if12_end: - // contracts/arc59.algo.ts:226 + // contracts/arc59.algo.ts:228 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -967,18 +996,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:227 + // contracts/arc59.algo.ts:229 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:228 + // contracts/arc59.algo.ts:230 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:231 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -991,7 +1020,7 @@ arc59_sendAsset: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:232 + // contracts/arc59.algo.ts:234 // return inbox; frame_dig 1 // inbox: address @@ -1025,14 +1054,14 @@ arc59_claim: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:241 + // 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:243 + // contracts/arc59.algo.ts:245 // sendAssetTransfer({ // sender: inbox, // assetReceiver: this.txn.sender, @@ -1044,17 +1073,17 @@ arc59_claim: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:244 + // contracts/arc59.algo.ts:246 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:245 + // contracts/arc59.algo.ts:247 // assetReceiver: this.txn.sender txn Sender itxn_field AssetReceiver - // contracts/arc59.algo.ts:246 + // contracts/arc59.algo.ts:248 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1062,12 +1091,12 @@ arc59_claim: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:247 + // contracts/arc59.algo.ts:249 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:248 + // contracts/arc59.algo.ts:250 // assetCloseTo: this.txn.sender txn Sender itxn_field AssetCloseTo @@ -1079,7 +1108,7 @@ arc59_claim: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:251 + // contracts/arc59.algo.ts:253 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1089,17 +1118,17 @@ arc59_claim: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:252 + // contracts/arc59.algo.ts:254 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:253 + // contracts/arc59.algo.ts:255 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:254 + // contracts/arc59.algo.ts:256 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1141,14 +1170,14 @@ arc59_reject: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:265 + // 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:267 + // contracts/arc59.algo.ts:269 // sendAssetTransfer({ // sender: inbox, // assetReceiver: asa.creator, @@ -1160,19 +1189,19 @@ arc59_reject: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:268 + // contracts/arc59.algo.ts:270 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:269 + // 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:270 + // contracts/arc59.algo.ts:272 // assetAmount: inbox.assetBalance(asa) frame_dig 0 // inbox: address frame_dig -1 // asa: AssetID @@ -1180,12 +1209,12 @@ arc59_reject: pop itxn_field AssetAmount - // contracts/arc59.algo.ts:271 + // contracts/arc59.algo.ts:273 // xferAsset: asa frame_dig -1 // asa: AssetID itxn_field XferAsset - // contracts/arc59.algo.ts:272 + // contracts/arc59.algo.ts:274 // assetCloseTo: asa.creator frame_dig -1 // asa: AssetID asset_params_get AssetCreator @@ -1199,7 +1228,7 @@ arc59_reject: // Submit inner transaction itxn_submit - // contracts/arc59.algo.ts:275 + // contracts/arc59.algo.ts:277 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1209,17 +1238,17 @@ arc59_reject: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:276 + // contracts/arc59.algo.ts:278 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:277 + // contracts/arc59.algo.ts:279 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:278 + // contracts/arc59.algo.ts:280 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1268,22 +1297,22 @@ arc59_reject: arc59_getInbox: proto 1 1 - // contracts/arc59.algo.ts:290 + // 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 @@ -1302,14 +1331,14 @@ arc59_claimAlgo: // Push empty bytes after the frame pointer to reserve space for local variables byte 0x - // contracts/arc59.algo.ts:295 + // 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:297 + // contracts/arc59.algo.ts:299 // assert(inbox.balance - inbox.minBalance !== 0) frame_dig 0 // inbox: address acct_params_get AcctBalance @@ -1322,7 +1351,7 @@ arc59_claimAlgo: != assert - // contracts/arc59.algo.ts:299 + // contracts/arc59.algo.ts:301 // sendPayment({ // sender: inbox, // receiver: this.txn.sender, @@ -1332,17 +1361,17 @@ arc59_claimAlgo: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:300 + // contracts/arc59.algo.ts:302 // sender: inbox frame_dig 0 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:301 + // contracts/arc59.algo.ts:303 // receiver: this.txn.sender txn Sender itxn_field Receiver - // contracts/arc59.algo.ts:302 + // contracts/arc59.algo.ts:304 // amount: inbox.balance - inbox.minBalance frame_dig 0 // inbox: address acct_params_get AcctBalance diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json index 4c166ecbf..e0f326bd4 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy9tdXRhYmxlX2FyYzU5LmFsZ28udHM6NQoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5hcHAuY3JlYXRvcikKCXR4biBTZW5kZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKCXBvcAoJPT0KCWFzc2VydAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json index 7460525bd..295b0259e 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json @@ -2822,74 +2822,74 @@ "source": 8, "pc": [ 736, - 737 + 737, + 738 ] }, { "teal": 597, "source": 8, "pc": [ - 738 + 739, + 740 ] }, { "teal": 598, "source": 8, "pc": [ - 739, - 740 + 741, + 742 ] }, { - "teal": 603, + "teal": 599, "source": 8, "pc": [ - 741, - 742 + 743 ] }, { - "teal": 604, + "teal": 600, "source": 8, "pc": [ - 743, - 744 + 744, + 745 ] }, { - "teal": 605, + "teal": 601, "source": 8, "pc": [ - 745, - 746 + 746, + 747 ] }, { - "teal": 606, + "teal": 602, "source": 8, "pc": [ - 747, 748 ] }, { - "teal": 607, + "teal": 603, "source": 8, "pc": [ - 749, - 750, - 751 + 749 ] }, { - "teal": 608, + "teal": 604, "source": 8, "pc": [ + 750, + 751, 752 ] }, { - "teal": 609, + "teal": 607, "source": 8, "pc": [ 753 @@ -2900,23 +2900,29 @@ "source": 8, "pc": [ 754, - 755, - 756 + 755 + ] + }, + { + "teal": 614, + "source": 8, + "pc": [ + 756, + 757 ] }, { "teal": 615, "source": 8, "pc": [ - 757, - 758 + 758, + 759 ] }, { "teal": 616, "source": 8, "pc": [ - 759, 760 ] }, @@ -2925,30 +2931,30 @@ "source": 8, "pc": [ 761, - 762 + 762, + 763 ] }, { "teal": 618, "source": 8, "pc": [ - 763, - 764 + 764, + 765 ] }, { "teal": 619, "source": 8, "pc": [ - 765, - 766 + 766, + 767 ] }, { "teal": 620, "source": 8, "pc": [ - 767, 768 ] }, @@ -2957,27 +2963,27 @@ "source": 8, "pc": [ 769, - 770 + 770, + 771 ] }, { - "teal": 622, + "teal": 624, "source": 8, "pc": [ - 771, - 772, - 773 + 772 ] }, { - "teal": 623, + "teal": 627, "source": 8, "pc": [ + 773, 774 ] }, { - "teal": 624, + "teal": 632, "source": 8, "pc": [ 775, @@ -2985,546 +2991,528 @@ ] }, { - "teal": 625, - "source": 8, - "pc": [ - 777 - ] - }, - { - "teal": 626, + "teal": 633, "source": 8, "pc": [ + 777, 778 ] }, { - "teal": 627, - "source": 8, - "pc": [ - 779 - ] - }, - { - "teal": 628, + "teal": 634, "source": 8, "pc": [ - 780, - 781 + 779, + 780 ] }, { "teal": 635, "source": 8, "pc": [ - 782, - 783 + 781, + 782 ] }, { - "teal": 639, + "teal": 636, "source": 8, "pc": [ + 783, 784, 785 ] }, { - "teal": 642, + "teal": 637, "source": 8, "pc": [ - 786, - 787 + 786 ] }, { - "teal": 643, + "teal": 638, "source": 8, "pc": [ - 788 + 787 ] }, { - "teal": 648, + "teal": 639, "source": 8, "pc": [ - 789 + 788, + 789, + 790 ] }, { - "teal": 651, + "teal": 644, "source": 8, "pc": [ - 790, 791, 792 ] }, { - "teal": 652, + "teal": 645, "source": 8, "pc": [ - 793 + 793, + 794 ] }, { - "teal": 655, + "teal": 646, "source": 8, "pc": [ - 794, 795, 796 ] }, { - "teal": 656, - "source": 8, - "pc": [ - 797 - ] - }, - { - "teal": 657, + "teal": 647, "source": 8, "pc": [ + 797, 798 ] }, { - "teal": 658, + "teal": 648, "source": 8, "pc": [ - 799 + 799, + 800 ] }, { - "teal": 659, + "teal": 649, "source": 8, "pc": [ - 800 + 801, + 802 ] }, { - "teal": 660, + "teal": 650, "source": 8, "pc": [ - 801 + 803, + 804 ] }, { - "teal": 663, + "teal": 651, "source": 8, "pc": [ - 802, - 803 + 805, + 806, + 807 ] }, { - "teal": 664, + "teal": 652, "source": 8, "pc": [ - 804 + 808 ] }, { - "teal": 665, + "teal": 653, "source": 8, "pc": [ - 805 + 809, + 810 ] }, { - "teal": 666, + "teal": 654, "source": 8, "pc": [ - 806 + 811 ] }, { - "teal": 667, + "teal": 655, "source": 8, "pc": [ - 807, - 808 + 812 ] }, { - "teal": 668, + "teal": 656, "source": 8, "pc": [ - 809 + 813 ] }, { - "teal": 669, + "teal": 657, "source": 8, "pc": [ - 810 + 814, + 815 ] }, { - "teal": 670, + "teal": 664, "source": 8, "pc": [ - 811 + 816, + 817 ] }, { - "teal": 673, + "teal": 668, "source": 8, "pc": [ - 812, - 813, - 814 + 818, + 819 ] }, { - "teal": 674, + "teal": 671, "source": 8, "pc": [ - 815 + 820, + 821 ] }, { - "teal": 675, + "teal": 672, "source": 8, "pc": [ - 816 + 822 ] }, { - "teal": 676, + "teal": 677, "source": 8, "pc": [ - 817 + 823 ] }, { - "teal": 677, + "teal": 680, "source": 8, "pc": [ - 818 + 824, + 825, + 826 ] }, { - "teal": 689, + "teal": 681, "source": 8, "pc": [ - 819, - 820, - 821 + 827 ] }, { - "teal": 692, + "teal": 684, "source": 8, "pc": [ - 822 + 828, + 829, + 830 ] }, { - "teal": 693, + "teal": 685, "source": 8, "pc": [ - 823, - 824 + 831 ] }, { - "teal": 700, + "teal": 686, "source": 8, "pc": [ - 825, - 826 + 832 ] }, { - "teal": 701, + "teal": 687, "source": 8, "pc": [ - 827, - 828 + 833 ] }, { - "teal": 702, + "teal": 688, "source": 8, "pc": [ - 829, - 830 + 834 ] }, { - "teal": 703, + "teal": 689, "source": 8, "pc": [ - 831 + 835 ] }, { - "teal": 704, + "teal": 692, "source": 8, "pc": [ - 832 + 836, + 837 ] }, { - "teal": 709, + "teal": 693, "source": 8, "pc": [ - 833, - 834 + 838 ] }, { - "teal": 710, + "teal": 694, "source": 8, "pc": [ - 835, - 836 + 839 ] }, { - "teal": 711, + "teal": 695, "source": 8, "pc": [ - 837, - 838 + 840 ] }, { - "teal": 712, + "teal": 696, "source": 8, "pc": [ - 839, - 840 + 841, + 842 ] }, { - "teal": 713, + "teal": 697, "source": 8, "pc": [ - 841 + 843 ] }, { - "teal": 714, + "teal": 698, "source": 8, "pc": [ - 842 + 844 ] }, { - "teal": 715, + "teal": 699, "source": 8, "pc": [ - 843, - 844, 845 ] }, { - "teal": 724, + "teal": 702, "source": 8, "pc": [ - 846 + 846, + 847, + 848 ] }, { - "teal": 725, + "teal": 703, "source": 8, "pc": [ - 847 + 849 ] }, { - "teal": 726, + "teal": 704, "source": 8, "pc": [ - 848, - 849 + 850 ] }, { - "teal": 730, + "teal": 705, "source": 8, "pc": [ - 850, 851 ] }, { - "teal": 731, + "teal": 706, "source": 8, "pc": [ - 852, - 853 + 852 ] }, { - "teal": 735, + "teal": 718, "source": 8, "pc": [ + 853, 854, 855 ] }, { - "teal": 736, + "teal": 721, "source": 8, "pc": [ - 856, - 857 + 856 ] }, { - "teal": 737, + "teal": 722, "source": 8, "pc": [ - 858, - 859 + 857, + 858 ] }, { - "teal": 741, + "teal": 729, "source": 8, "pc": [ - 860, - 861 + 859, + 860 ] }, { - "teal": 742, + "teal": 730, "source": 8, "pc": [ - 862, - 863 + 861, + 862 ] }, { - "teal": 743, + "teal": 731, "source": 8, "pc": [ - 864, - 865 + 863, + 864 ] }, { - "teal": 746, + "teal": 732, "source": 8, "pc": [ - 866 + 865 ] }, { - "teal": 747, + "teal": 733, "source": 8, "pc": [ - 867, - 868 + 866 ] }, { - "teal": 750, + "teal": 738, "source": 8, "pc": [ - 869 + 867, + 868 ] }, { - "teal": 755, + "teal": 739, "source": 8, "pc": [ - 870, - 871 + 869, + 870 ] }, { - "teal": 756, + "teal": 740, "source": 8, "pc": [ + 871, 872 ] }, { - "teal": 757, + "teal": 741, "source": 8, "pc": [ - 873 + 873, + 874 ] }, { - "teal": 758, + "teal": 742, "source": 8, "pc": [ - 874, - 875, - 876 + 875 ] }, { - "teal": 766, + "teal": 743, "source": 8, "pc": [ - 877 + 876 ] }, { - "teal": 767, + "teal": 744, "source": 8, "pc": [ - 878 + 877, + 878, + 879 ] }, { - "teal": 768, + "teal": 753, "source": 8, "pc": [ - 879, 880 ] }, { - "teal": 772, + "teal": 754, "source": 8, "pc": [ - 881, - 882 + 881 ] }, { - "teal": 773, + "teal": 755, "source": 8, "pc": [ - 883, - 884 + 882, + 883 ] }, { - "teal": 777, + "teal": 759, "source": 8, "pc": [ - 885, - 886 + 884, + 885 ] }, { - "teal": 778, + "teal": 760, "source": 8, "pc": [ - 887, - 888 + 886, + 887 ] }, { - "teal": 781, + "teal": 764, "source": 8, "pc": [ + 888, 889 ] }, { - "teal": 782, + "teal": 765, "source": 8, "pc": [ 890, @@ -3532,31 +3520,31 @@ ] }, { - "teal": 785, + "teal": 766, "source": 8, "pc": [ - 892 + 892, + 893 ] }, { - "teal": 790, + "teal": 770, "source": 8, "pc": [ - 893, - 894 + 894, + 895 ] }, { - "teal": 791, + "teal": 771, "source": 8, "pc": [ - 895, 896, 897 ] }, { - "teal": 796, + "teal": 772, "source": 8, "pc": [ 898, @@ -3564,130 +3552,136 @@ ] }, { - "teal": 797, + "teal": 775, "source": 8, "pc": [ 900 ] }, { - "teal": 798, + "teal": 776, "source": 8, "pc": [ - 901 + 901, + 902 ] }, { - "teal": 799, + "teal": 779, "source": 8, "pc": [ - 902 + 903 ] }, { - "teal": 800, + "teal": 784, "source": 8, "pc": [ - 903, - 904 + 904, + 905 ] }, { - "teal": 804, + "teal": 785, "source": 8, "pc": [ - 905, 906 ] }, { - "teal": 805, + "teal": 786, + "source": 8, + "pc": [ + 907 + ] + }, + { + "teal": 787, "source": 8, "pc": [ - 907, 908, - 909 + 909, + 910 ] }, { - "teal": 806, + "teal": 795, "source": 8, "pc": [ - 910, 911 ] }, { - "teal": 811, + "teal": 796, "source": 8, "pc": [ - 912, - 913 + 912 ] }, { - "teal": 812, + "teal": 797, "source": 8, "pc": [ + 913, 914 ] }, { - "teal": 813, + "teal": 801, "source": 8, "pc": [ - 915 + 915, + 916 ] }, { - "teal": 814, + "teal": 802, "source": 8, "pc": [ - 916, 917, 918 ] }, { - "teal": 822, + "teal": 806, "source": 8, "pc": [ - 919 + 919, + 920 ] }, { - "teal": 823, + "teal": 807, "source": 8, "pc": [ - 920 + 921, + 922 ] }, { - "teal": 824, + "teal": 810, "source": 8, "pc": [ - 921, - 922 + 923 ] }, { - "teal": 828, + "teal": 811, "source": 8, "pc": [ - 923, - 924 + 924, + 925 ] }, { - "teal": 829, + "teal": 814, "source": 8, "pc": [ - 925, 926 ] }, { - "teal": 833, + "teal": 819, "source": 8, "pc": [ 927, @@ -3695,45 +3689,45 @@ ] }, { - "teal": 834, + "teal": 820, "source": 8, "pc": [ 929, - 930 + 930, + 931 ] }, { - "teal": 837, + "teal": 825, "source": 8, "pc": [ - 931 + 932, + 933 ] }, { - "teal": 838, + "teal": 826, "source": 8, "pc": [ - 932, - 933 + 934 ] }, { - "teal": 841, + "teal": 827, "source": 8, "pc": [ - 934 + 935 ] }, { - "teal": 847, + "teal": 828, "source": 8, "pc": [ - 935, 936 ] }, { - "teal": 848, + "teal": 829, "source": 8, "pc": [ 937, @@ -3741,7 +3735,7 @@ ] }, { - "teal": 849, + "teal": 833, "source": 8, "pc": [ 939, @@ -3749,85 +3743,85 @@ ] }, { - "teal": 850, + "teal": 834, "source": 8, "pc": [ 941, - 942 + 942, + 943 ] }, { - "teal": 851, + "teal": 835, "source": 8, "pc": [ - 943 + 944, + 945 ] }, { - "teal": 852, + "teal": 840, "source": 8, "pc": [ - 944 + 946, + 947 ] }, { - "teal": 853, + "teal": 841, "source": 8, "pc": [ - 945 + 948 ] }, { - "teal": 854, + "teal": 842, "source": 8, "pc": [ - 946, - 947, - 948 + 949 ] }, { - "teal": 859, + "teal": 843, "source": 8, "pc": [ - 949, - 950 + 950, + 951, + 952 ] }, { - "teal": 860, + "teal": 851, "source": 8, "pc": [ - 951, - 952 + 953 ] }, { - "teal": 865, + "teal": 852, "source": 8, "pc": [ - 953, 954 ] }, { - "teal": 866, + "teal": 853, "source": 8, "pc": [ - 955 + 955, + 956 ] }, { - "teal": 867, + "teal": 857, "source": 8, "pc": [ - 956, 957, 958 ] }, { - "teal": 872, + "teal": 858, "source": 8, "pc": [ 959, @@ -3835,7 +3829,7 @@ ] }, { - "teal": 873, + "teal": 862, "source": 8, "pc": [ 961, @@ -3843,22 +3837,22 @@ ] }, { - "teal": 874, + "teal": 863, "source": 8, "pc": [ - 963 + 963, + 964 ] }, { - "teal": 875, + "teal": 866, "source": 8, "pc": [ - 964, 965 ] }, { - "teal": 881, + "teal": 867, "source": 8, "pc": [ 966, @@ -3866,22 +3860,22 @@ ] }, { - "teal": 882, + "teal": 870, "source": 8, "pc": [ - 968, - 969 + 968 ] }, { - "teal": 883, + "teal": 876, "source": 8, "pc": [ + 969, 970 ] }, { - "teal": 884, + "teal": 877, "source": 8, "pc": [ 971, @@ -3889,7 +3883,7 @@ ] }, { - "teal": 885, + "teal": 878, "source": 8, "pc": [ 973, @@ -3897,36 +3891,36 @@ ] }, { - "teal": 886, + "teal": 879, "source": 8, "pc": [ - 975 + 975, + 976 ] }, { - "teal": 887, + "teal": 880, "source": 8, "pc": [ - 976, 977 ] }, { - "teal": 888, + "teal": 881, "source": 8, "pc": [ 978 ] }, { - "teal": 889, + "teal": 882, "source": 8, "pc": [ 979 ] }, { - "teal": 890, + "teal": 883, "source": 8, "pc": [ 980, @@ -3935,21 +3929,15 @@ ] }, { - "teal": 898, - "source": 8, - "pc": [ - 983 - ] - }, - { - "teal": 899, + "teal": 888, "source": 8, "pc": [ + 983, 984 ] }, { - "teal": 900, + "teal": 889, "source": 8, "pc": [ 985, @@ -3957,7 +3945,7 @@ ] }, { - "teal": 904, + "teal": 894, "source": 8, "pc": [ 987, @@ -3965,23 +3953,23 @@ ] }, { - "teal": 905, + "teal": 895, "source": 8, "pc": [ - 989, - 990 + 989 ] }, { - "teal": 909, + "teal": 896, "source": 8, "pc": [ + 990, 991, 992 ] }, { - "teal": 910, + "teal": 901, "source": 8, "pc": [ 993, @@ -3989,59 +3977,53 @@ ] }, { - "teal": 913, + "teal": 902, "source": 8, "pc": [ - 995 + 995, + 996 ] }, { - "teal": 914, + "teal": 903, "source": 8, "pc": [ - 996, 997 ] }, { - "teal": 917, - "source": 8, - "pc": [ - 998 - ] - }, - { - "teal": 927, + "teal": 904, "source": 8, "pc": [ + 998, 999 ] }, { - "teal": 928, + "teal": 910, "source": 8, "pc": [ - 1000 + 1000, + 1001 ] }, { - "teal": 929, + "teal": 911, "source": 8, "pc": [ - 1001, - 1002 + 1002, + 1003 ] }, { - "teal": 933, + "teal": 912, "source": 8, "pc": [ - 1003, 1004 ] }, { - "teal": 934, + "teal": 913, "source": 8, "pc": [ 1005, @@ -4049,7 +4031,7 @@ ] }, { - "teal": 938, + "teal": 914, "source": 8, "pc": [ 1007, @@ -4057,61 +4039,67 @@ ] }, { - "teal": 939, + "teal": 915, "source": 8, "pc": [ - 1009, - 1010 + 1009 ] }, { - "teal": 943, + "teal": 916, "source": 8, "pc": [ + 1010, 1011 ] }, { - "teal": 944, + "teal": 917, + "source": 8, + "pc": [ + 1012 + ] + }, + { + "teal": 918, "source": 8, "pc": [ - 1012, 1013 ] }, { - "teal": 948, + "teal": 919, "source": 8, "pc": [ 1014, - 1015 + 1015, + 1016 ] }, { - "teal": 949, + "teal": 927, "source": 8, "pc": [ - 1016, 1017 ] }, { - "teal": 950, + "teal": 928, "source": 8, "pc": [ - 1018, - 1019 + 1018 ] }, { - "teal": 953, + "teal": 929, "source": 8, "pc": [ + 1019, 1020 ] }, { - "teal": 954, + "teal": 933, "source": 8, "pc": [ 1021, @@ -4119,122 +4107,122 @@ ] }, { - "teal": 957, + "teal": 934, "source": 8, "pc": [ - 1023 + 1023, + 1024 ] }, { - "teal": 966, + "teal": 938, "source": 8, "pc": [ - 1024 + 1025, + 1026 ] }, { - "teal": 967, + "teal": 939, "source": 8, "pc": [ - 1025 + 1027, + 1028 ] }, { - "teal": 968, + "teal": 942, "source": 8, "pc": [ - 1026, - 1027 + 1029 ] }, { - "teal": 972, + "teal": 943, "source": 8, "pc": [ - 1028, - 1029 + 1030, + 1031 ] }, { - "teal": 973, + "teal": 946, "source": 8, "pc": [ - 1030, - 1031 + 1032 ] }, { - "teal": 977, + "teal": 956, "source": 8, "pc": [ - 1032, 1033 ] }, { - "teal": 978, + "teal": 957, "source": 8, "pc": [ - 1034, - 1035 + 1034 ] }, { - "teal": 979, + "teal": 958, "source": 8, "pc": [ - 1036, - 1037 + 1035, + 1036 ] }, { - "teal": 983, + "teal": 962, "source": 8, "pc": [ - 1038, - 1039 + 1037, + 1038 ] }, { - "teal": 984, + "teal": 963, "source": 8, "pc": [ - 1040, - 1041 + 1039, + 1040 ] }, { - "teal": 985, + "teal": 967, "source": 8, "pc": [ - 1042, - 1043 + 1041, + 1042 ] }, { - "teal": 988, + "teal": 968, "source": 8, "pc": [ + 1043, 1044 ] }, { - "teal": 989, + "teal": 972, "source": 8, "pc": [ - 1045, - 1046 + 1045 ] }, { - "teal": 992, + "teal": 973, "source": 8, "pc": [ + 1046, 1047 ] }, { - "teal": 996, + "teal": 977, "source": 8, "pc": [ 1048, @@ -4242,7 +4230,7 @@ ] }, { - "teal": 1000, + "teal": 978, "source": 8, "pc": [ 1050, @@ -4250,7 +4238,7 @@ ] }, { - "teal": 1003, + "teal": 979, "source": 8, "pc": [ 1052, @@ -4258,69 +4246,75 @@ ] }, { - "teal": 1004, + "teal": 982, "source": 8, "pc": [ 1054 ] }, { - "teal": 1009, + "teal": 983, "source": 8, "pc": [ 1055, - 1056, + 1056 + ] + }, + { + "teal": 986, + "source": 8, + "pc": [ 1057 ] }, { - "teal": 1010, + "teal": 995, "source": 8, "pc": [ 1058 ] }, { - "teal": 1013, + "teal": 996, "source": 8, "pc": [ - 1059, - 1060, - 1061 + 1059 ] }, { - "teal": 1014, + "teal": 997, "source": 8, "pc": [ - 1062 + 1060, + 1061 ] }, { - "teal": 1015, + "teal": 1001, "source": 8, "pc": [ + 1062, 1063 ] }, { - "teal": 1023, + "teal": 1002, "source": 8, "pc": [ 1064, - 1065, - 1066 + 1065 ] }, { - "teal": 1026, + "teal": 1006, "source": 8, "pc": [ + 1066, 1067 ] }, { - "teal": 1030, + "teal": 1007, "source": 8, "pc": [ 1068, @@ -4328,21 +4322,15 @@ ] }, { - "teal": 1031, - "source": 8, - "pc": [ - 1070 - ] - }, - { - "teal": 1032, + "teal": 1008, "source": 8, "pc": [ + 1070, 1071 ] }, { - "teal": 1033, + "teal": 1012, "source": 8, "pc": [ 1072, @@ -4350,45 +4338,45 @@ ] }, { - "teal": 1043, + "teal": 1013, "source": 8, "pc": [ - 1074 + 1074, + 1075 ] }, { - "teal": 1044, + "teal": 1014, "source": 8, "pc": [ - 1075 + 1076, + 1077 ] }, { - "teal": 1045, + "teal": 1017, "source": 8, "pc": [ - 1076, - 1077 + 1078 ] }, { - "teal": 1049, + "teal": 1018, "source": 8, "pc": [ - 1078, - 1079 + 1079, + 1080 ] }, { - "teal": 1050, + "teal": 1021, "source": 8, "pc": [ - 1080, 1081 ] }, { - "teal": 1054, + "teal": 1025, "source": 8, "pc": [ 1082, @@ -4396,7 +4384,7 @@ ] }, { - "teal": 1055, + "teal": 1029, "source": 8, "pc": [ 1084, @@ -4404,7 +4392,7 @@ ] }, { - "teal": 1059, + "teal": 1032, "source": 8, "pc": [ 1086, @@ -4412,169 +4400,169 @@ ] }, { - "teal": 1060, + "teal": 1033, "source": 8, "pc": [ - 1088, - 1089 + 1088 ] }, { - "teal": 1061, + "teal": 1038, "source": 8, "pc": [ + 1089, 1090, 1091 ] }, { - "teal": 1062, + "teal": 1039, "source": 8, "pc": [ 1092 ] }, { - "teal": 1063, + "teal": 1042, "source": 8, "pc": [ 1093, - 1094 + 1094, + 1095 ] }, { - "teal": 1067, + "teal": 1043, "source": 8, "pc": [ - 1095, 1096 ] }, { - "teal": 1068, + "teal": 1044, "source": 8, "pc": [ - 1097, - 1098 + 1097 ] }, { - "teal": 1072, + "teal": 1052, "source": 8, "pc": [ + 1098, 1099, 1100 ] }, { - "teal": 1073, + "teal": 1055, "source": 8, "pc": [ - 1101, - 1102 + 1101 ] }, { - "teal": 1076, + "teal": 1059, "source": 8, "pc": [ + 1102, 1103 ] }, { - "teal": 1077, + "teal": 1060, "source": 8, "pc": [ - 1104, - 1105 + 1104 ] }, { - "teal": 1080, + "teal": 1061, "source": 8, "pc": [ - 1106 + 1105 ] }, { - "teal": 1088, + "teal": 1062, "source": 8, "pc": [ + 1106, 1107 ] }, { - "teal": 1089, + "teal": 1072, "source": 8, "pc": [ 1108 ] }, { - "teal": 1090, + "teal": 1073, "source": 8, "pc": [ - 1109, - 1110 + 1109 ] }, { - "teal": 1094, + "teal": 1074, "source": 8, "pc": [ - 1111, - 1112 + 1110, + 1111 ] }, { - "teal": 1095, + "teal": 1078, "source": 8, "pc": [ - 1113, - 1114 + 1112, + 1113 ] }, { - "teal": 1099, + "teal": 1079, "source": 8, "pc": [ - 1115, - 1116 + 1114, + 1115 ] }, { - "teal": 1100, + "teal": 1083, "source": 8, "pc": [ - 1117, - 1118 + 1116, + 1117 ] }, { - "teal": 1104, + "teal": 1084, "source": 8, "pc": [ - 1119, - 1120 + 1118, + 1119 ] }, { - "teal": 1105, + "teal": 1088, "source": 8, "pc": [ - 1121, - 1122 + 1120, + 1121 ] }, { - "teal": 1106, + "teal": 1089, "source": 8, "pc": [ + 1122, 1123 ] }, { - "teal": 1107, + "teal": 1090, "source": 8, "pc": [ 1124, @@ -4582,44 +4570,38 @@ ] }, { - "teal": 1108, + "teal": 1091, "source": 8, "pc": [ - 1126, - 1127 + 1126 ] }, { - "teal": 1109, + "teal": 1092, "source": 8, "pc": [ + 1127, 1128 ] }, { - "teal": 1110, - "source": 8, - "pc": [ - 1129 - ] - }, - { - "teal": 1111, + "teal": 1096, "source": 8, "pc": [ - 1130, - 1131 + 1129, + 1130 ] }, { - "teal": 1114, + "teal": 1097, "source": 8, "pc": [ + 1131, 1132 ] }, { - "teal": 1115, + "teal": 1101, "source": 8, "pc": [ 1133, @@ -4627,120 +4609,114 @@ ] }, { - "teal": 1118, + "teal": 1102, "source": 8, "pc": [ - 1135 + 1135, + 1136 ] }, { - "teal": 1119, + "teal": 1105, "source": 8, "pc": [ - 1136 + 1137 ] }, { - "teal": 1124, + "teal": 1106, "source": 8, "pc": [ - 1137, 1138, 1139 ] }, { - "teal": 1125, + "teal": 1109, "source": 8, "pc": [ 1140 ] }, { - "teal": 1128, + "teal": 1117, "source": 8, "pc": [ - 1141, - 1142, - 1143 + 1141 ] }, { - "teal": 1129, + "teal": 1118, "source": 8, "pc": [ - 1144 + 1142 ] }, { - "teal": 1130, + "teal": 1119, "source": 8, "pc": [ - 1145 + 1143, + 1144 ] }, { - "teal": 1139, + "teal": 1123, "source": 8, "pc": [ - 1146, - 1147, - 1148 + 1145, + 1146 ] }, { - "teal": 1142, + "teal": 1124, "source": 8, "pc": [ - 1149 + 1147, + 1148 ] }, { - "teal": 1146, + "teal": 1128, "source": 8, "pc": [ - 1150, - 1151 + 1149, + 1150 ] }, { - "teal": 1147, + "teal": 1129, "source": 8, "pc": [ + 1151, 1152 ] }, { - "teal": 1148, - "source": 8, - "pc": [ - 1153 - ] - }, - { - "teal": 1149, + "teal": 1133, "source": 8, "pc": [ - 1154, - 1155 + 1153, + 1154 ] }, { - "teal": 1159, + "teal": 1134, "source": 8, "pc": [ + 1155, 1156 ] }, { - "teal": 1160, + "teal": 1135, "source": 8, "pc": [ 1157 ] }, { - "teal": 1161, + "teal": 1136, "source": 8, "pc": [ 1158, @@ -4748,7 +4724,7 @@ ] }, { - "teal": 1165, + "teal": 1137, "source": 8, "pc": [ 1160, @@ -4756,15 +4732,21 @@ ] }, { - "teal": 1166, + "teal": 1138, + "source": 8, + "pc": [ + 1162 + ] + }, + { + "teal": 1139, "source": 8, "pc": [ - 1162, 1163 ] }, { - "teal": 1170, + "teal": 1140, "source": 8, "pc": [ 1164, @@ -4772,85 +4754,91 @@ ] }, { - "teal": 1171, + "teal": 1143, "source": 8, "pc": [ - 1166, - 1167 + 1166 ] }, { - "teal": 1172, + "teal": 1144, "source": 8, "pc": [ + 1167, 1168 ] }, { - "teal": 1173, + "teal": 1147, + "source": 8, + "pc": [ + 1169 + ] + }, + { + "teal": 1148, "source": 8, "pc": [ - 1169, 1170 ] }, { - "teal": 1177, + "teal": 1153, "source": 8, "pc": [ 1171, - 1172 + 1172, + 1173 ] }, { - "teal": 1178, + "teal": 1154, "source": 8, "pc": [ - 1173, 1174 ] }, { - "teal": 1179, + "teal": 1157, "source": 8, "pc": [ 1175, - 1176 + 1176, + 1177 ] }, { - "teal": 1180, + "teal": 1158, "source": 8, "pc": [ - 1177 + 1178 ] }, { - "teal": 1181, + "teal": 1159, "source": 8, "pc": [ - 1178, 1179 ] }, { - "teal": 1185, + "teal": 1168, "source": 8, "pc": [ 1180, - 1181 + 1181, + 1182 ] }, { - "teal": 1186, + "teal": 1171, "source": 8, "pc": [ - 1182, 1183 ] }, { - "teal": 1190, + "teal": 1175, "source": 8, "pc": [ 1184, @@ -4858,90 +4846,90 @@ ] }, { - "teal": 1191, + "teal": 1176, "source": 8, "pc": [ - 1186, - 1187 + 1186 ] }, { - "teal": 1192, + "teal": 1177, "source": 8, "pc": [ - 1188 + 1187 ] }, { - "teal": 1193, + "teal": 1178, "source": 8, "pc": [ - 1189, - 1190 + 1188, + 1189 ] }, { - "teal": 1196, + "teal": 1188, "source": 8, "pc": [ - 1191 + 1190 ] }, { - "teal": 1197, + "teal": 1189, "source": 8, "pc": [ - 1192, - 1193 + 1191 ] }, { - "teal": 1200, + "teal": 1190, "source": 8, "pc": [ - 1194 + 1192, + 1193 ] }, { - "teal": 1208, + "teal": 1194, "source": 8, "pc": [ + 1194, 1195 ] }, { - "teal": 1209, + "teal": 1195, "source": 8, "pc": [ - 1196 + 1196, + 1197 ] }, { - "teal": 1210, + "teal": 1199, "source": 8, "pc": [ - 1197, - 1198 + 1198, + 1199 ] }, { - "teal": 1214, + "teal": 1200, "source": 8, "pc": [ - 1199, - 1200 + 1200, + 1201 ] }, { - "teal": 1215, + "teal": 1201, "source": 8, "pc": [ - 1201, 1202 ] }, { - "teal": 1219, + "teal": 1202, "source": 8, "pc": [ 1203, @@ -4949,7 +4937,7 @@ ] }, { - "teal": 1220, + "teal": 1206, "source": 8, "pc": [ 1205, @@ -4957,7 +4945,7 @@ ] }, { - "teal": 1224, + "teal": 1207, "source": 8, "pc": [ 1207, @@ -4965,7 +4953,7 @@ ] }, { - "teal": 1225, + "teal": 1208, "source": 8, "pc": [ 1209, @@ -4973,14 +4961,14 @@ ] }, { - "teal": 1226, + "teal": 1209, "source": 8, "pc": [ 1211 ] }, { - "teal": 1227, + "teal": 1210, "source": 8, "pc": [ 1212, @@ -4988,7 +4976,7 @@ ] }, { - "teal": 1228, + "teal": 1214, "source": 8, "pc": [ 1214, @@ -4996,21 +4984,15 @@ ] }, { - "teal": 1229, - "source": 8, - "pc": [ - 1216 - ] - }, - { - "teal": 1230, + "teal": 1215, "source": 8, "pc": [ + 1216, 1217 ] }, { - "teal": 1231, + "teal": 1219, "source": 8, "pc": [ 1218, @@ -5018,171 +5000,159 @@ ] }, { - "teal": 1234, + "teal": 1220, "source": 8, "pc": [ - 1220 + 1220, + 1221 ] }, { - "teal": 1235, + "teal": 1221, "source": 8, "pc": [ - 1221, 1222 ] }, { - "teal": 1238, - "source": 8, - "pc": [ - 1223 - ] - }, - { - "teal": 1239, + "teal": 1222, "source": 8, "pc": [ + 1223, 1224 ] }, { - "teal": 1244, + "teal": 1225, "source": 8, "pc": [ 1225 ] }, { - "teal": 1247, + "teal": 1226, "source": 8, "pc": [ 1226, - 1227, - 1228 + 1227 ] }, { - "teal": 1248, + "teal": 1229, "source": 8, "pc": [ - 1229 + 1228 ] }, { - "teal": 1249, + "teal": 1237, "source": 8, "pc": [ - 1230 + 1229 ] }, { - "teal": 1250, + "teal": 1238, "source": 8, "pc": [ - 1231 + 1230 ] }, { - "teal": 1251, + "teal": 1239, "source": 8, "pc": [ + 1231, 1232 ] }, { - "teal": 1252, + "teal": 1243, "source": 8, "pc": [ - 1233 + 1233, + 1234 ] }, { - "teal": 1255, + "teal": 1244, "source": 8, "pc": [ - 1234, 1235, 1236 ] }, { - "teal": 1256, - "source": 8, - "pc": [ - 1237 - ] - }, - { - "teal": 1257, + "teal": 1248, "source": 8, "pc": [ + 1237, 1238 ] }, { - "teal": 1258, + "teal": 1249, "source": 8, "pc": [ - 1239 + 1239, + 1240 ] }, { - "teal": 1259, + "teal": 1253, "source": 8, "pc": [ - 1240 + 1241, + 1242 ] }, { - "teal": 1269, + "teal": 1254, "source": 8, "pc": [ - 1241, - 1242, - 1243 + 1243, + 1244 ] }, { - "teal": 1273, + "teal": 1255, "source": 8, "pc": [ - 1244, 1245 ] }, { - "teal": 1274, + "teal": 1256, "source": 8, "pc": [ - 1246 + 1246, + 1247 ] }, { - "teal": 1275, + "teal": 1257, "source": 8, "pc": [ - 1247 + 1248, + 1249 ] }, { - "teal": 1276, + "teal": 1258, "source": 8, "pc": [ - 1248 + 1250 ] }, { - "teal": 1277, + "teal": 1259, "source": 8, "pc": [ - 1249, - 1250, 1251 ] }, { - "teal": 1278, + "teal": 1260, "source": 8, "pc": [ 1252, @@ -5190,202 +5160,202 @@ ] }, { - "teal": 1279, + "teal": 1263, "source": 8, "pc": [ 1254 ] }, { - "teal": 1280, + "teal": 1264, "source": 8, "pc": [ - 1255 + 1255, + 1256 ] }, { - "teal": 1281, + "teal": 1267, "source": 8, "pc": [ - 1256, - 1257, - 1258 + 1257 ] }, { - "teal": 1284, + "teal": 1268, "source": 8, "pc": [ - 1259, - 1260 + 1258 ] }, { - "teal": 1287, + "teal": 1273, "source": 8, "pc": [ - 1261 + 1259 ] }, { - "teal": 1292, + "teal": 1276, "source": 8, "pc": [ - 1262, - 1263, - 1264 + 1260, + 1261, + 1262 ] }, { - "teal": 1293, + "teal": 1277, "source": 8, "pc": [ - 1265 + 1263 ] }, { - "teal": 1294, + "teal": 1278, "source": 8, "pc": [ - 1266 + 1264 ] }, { - "teal": 1300, + "teal": 1279, "source": 8, "pc": [ - 1267, - 1268, - 1269 + 1265 ] }, { - "teal": 1303, + "teal": 1280, "source": 8, "pc": [ - 1270 + 1266 ] }, { - "teal": 1307, + "teal": 1281, "source": 8, "pc": [ - 1271, - 1272 + 1267 ] }, { - "teal": 1308, + "teal": 1284, "source": 8, "pc": [ - 1273 + 1268, + 1269, + 1270 ] }, { - "teal": 1309, + "teal": 1285, "source": 8, "pc": [ - 1274 + 1271 ] }, { - "teal": 1310, + "teal": 1286, "source": 8, "pc": [ - 1275, - 1276 + 1272 ] }, { - "teal": 1314, + "teal": 1287, "source": 8, "pc": [ - 1277, - 1278 + 1273 ] }, { - "teal": 1315, + "teal": 1288, "source": 8, "pc": [ - 1279, - 1280 + 1274 ] }, { - "teal": 1316, + "teal": 1298, "source": 8, "pc": [ - 1281 + 1275, + 1276, + 1277 ] }, { - "teal": 1317, + "teal": 1302, "source": 8, "pc": [ - 1282, - 1283 + 1278, + 1279 ] }, { - "teal": 1318, + "teal": 1303, "source": 8, "pc": [ - 1284, - 1285 + 1280 ] }, { - "teal": 1319, + "teal": 1304, "source": 8, "pc": [ - 1286 + 1281 ] }, { - "teal": 1320, + "teal": 1305, "source": 8, "pc": [ - 1287 + 1282 ] }, { - "teal": 1321, + "teal": 1306, "source": 8, "pc": [ - 1288 + 1283, + 1284, + 1285 ] }, { - "teal": 1322, + "teal": 1307, "source": 8, "pc": [ - 1289 + 1286, + 1287 ] }, { - "teal": 1323, + "teal": 1308, "source": 8, "pc": [ - 1290 + 1288 ] }, { - "teal": 1331, + "teal": 1309, "source": 8, "pc": [ - 1291 + 1289 ] }, { - "teal": 1332, + "teal": 1310, "source": 8, "pc": [ + 1290, + 1291, 1292 ] }, { - "teal": 1333, + "teal": 1313, "source": 8, "pc": [ 1293, @@ -5393,47 +5363,53 @@ ] }, { - "teal": 1337, + "teal": 1316, "source": 8, "pc": [ - 1295, - 1296 + 1295 ] }, { - "teal": 1338, + "teal": 1321, "source": 8, "pc": [ + 1296, 1297, 1298 ] }, { - "teal": 1342, + "teal": 1322, + "source": 8, + "pc": [ + 1299 + ] + }, + { + "teal": 1323, "source": 8, "pc": [ - 1299, 1300 ] }, { - "teal": 1343, + "teal": 1329, "source": 8, "pc": [ 1301, - 1302 + 1302, + 1303 ] }, { - "teal": 1347, + "teal": 1332, "source": 8, "pc": [ - 1303, 1304 ] }, { - "teal": 1348, + "teal": 1336, "source": 8, "pc": [ 1305, @@ -5441,340 +5417,442 @@ ] }, { - "teal": 1349, + "teal": 1337, "source": 8, "pc": [ 1307 ] }, { - "teal": 1350, + "teal": 1338, "source": 8, "pc": [ - 1308, - 1309 + 1308 ] }, { - "teal": 1351, + "teal": 1339, "source": 8, "pc": [ - 1310, - 1311 + 1309, + 1310 ] }, { - "teal": 1352, + "teal": 1343, "source": 8, "pc": [ + 1311, 1312 ] }, { - "teal": 1353, + "teal": 1344, "source": 8, "pc": [ - 1313 + 1313, + 1314 ] }, { - "teal": 1354, + "teal": 1345, "source": 8, "pc": [ - 1314, 1315 ] }, { - "teal": 1357, + "teal": 1346, "source": 8, "pc": [ - 1316 + 1316, + 1317 ] }, { - "teal": 1358, + "teal": 1347, "source": 8, "pc": [ - 1317, - 1318 + 1318, + 1319 ] }, { - "teal": 1361, + "teal": 1348, "source": 8, "pc": [ - 1319 + 1320 ] }, { - "teal": 1362, + "teal": 1349, "source": 8, "pc": [ - 1320 + 1321 ] }, { - "teal": 1367, - "source": 4, + "teal": 1350, + "source": 8, + "pc": [ + 1322 + ] + }, + { + "teal": 1351, + "source": 8, "pc": [ - 1321, - 1322, 1323 ] }, { - "teal": 1368, - "source": 4, + "teal": 1352, + "source": 8, "pc": [ 1324 ] }, { - "teal": 1369, - "source": 4, + "teal": 1360, + "source": 8, "pc": [ 1325 ] }, { - "teal": 1373, - "source": 4, + "teal": 1361, + "source": 8, + "pc": [ + 1326 + ] + }, + { + "teal": 1362, + "source": 8, "pc": [ - 1326, 1327, 1328 ] }, { - "teal": 1377, - "source": 5, + "teal": 1366, + "source": 8, "pc": [ 1329, 1330 ] }, { - "teal": 1378, - "source": 5, + "teal": 1367, + "source": 8, "pc": [ 1331, - 1332, - 1333 + 1332 ] }, { - "teal": 1379, - "source": 5, + "teal": 1371, + "source": 8, "pc": [ - 1334, - 1335 + 1333, + 1334 ] }, { - "teal": 1380, - "source": 5, + "teal": 1372, + "source": 8, "pc": [ + 1335, 1336 ] }, { - "teal": 1381, - "source": 5, + "teal": 1376, + "source": 8, "pc": [ - 1337 + 1337, + 1338 ] }, { - "teal": 1382, - "source": 5, + "teal": 1377, + "source": 8, "pc": [ - 1338 + 1339, + 1340 ] }, { - "teal": 1383, - "source": 4, + "teal": 1378, + "source": 8, "pc": [ - 1339 + 1341 ] }, { - "teal": 1386, - "source": 3, + "teal": 1379, + "source": 8, "pc": [ - 1340, - 1341, 1342, - 1343, + 1343 + ] + }, + { + "teal": 1380, + "source": 8, + "pc": [ 1344, 1345 ] }, { - "teal": 1387, - "source": 3, + "teal": 1381, + "source": 8, "pc": [ - 1346, - 1347, - 1348 + 1346 ] }, { - "teal": 1388, - "source": 3, + "teal": 1382, + "source": 8, + "pc": [ + 1347 + ] + }, + { + "teal": 1383, + "source": 8, + "pc": [ + 1348, + 1349 + ] + }, + { + "teal": 1386, + "source": 8, + "pc": [ + 1350 + ] + }, + { + "teal": 1387, + "source": 8, "pc": [ - 1349, - 1350, 1351, 1352 ] }, { - "teal": 1389, - "source": 3, + "teal": 1390, + "source": 8, "pc": [ 1353 ] }, { - "teal": 1392, - "source": 3, + "teal": 1391, + "source": 8, + "pc": [ + 1354 + ] + }, + { + "teal": 1396, + "source": 4, "pc": [ - 1354, 1355, 1356, - 1357, - 1358, + 1357 + ] + }, + { + "teal": 1397, + "source": 4, + "pc": [ + 1358 + ] + }, + { + "teal": 1398, + "source": 4, + "pc": [ 1359 ] }, { - "teal": 1393, - "source": 3, + "teal": 1402, + "source": 4, "pc": [ 1360, 1361, - 1362, + 1362 + ] + }, + { + "teal": 1406, + "source": 5, + "pc": [ 1363, - 1364, - 1365 + 1364 ] }, { - "teal": 1394, - "source": 3, + "teal": 1407, + "source": 5, "pc": [ + 1365, 1366, - 1367, + 1367 + ] + }, + { + "teal": 1408, + "source": 5, + "pc": [ 1368, - 1369, - 1370, + 1369 + ] + }, + { + "teal": 1409, + "source": 5, + "pc": [ + 1370 + ] + }, + { + "teal": 1410, + "source": 5, + "pc": [ 1371 ] }, { - "teal": 1395, + "teal": 1411, + "source": 5, + "pc": [ + 1372 + ] + }, + { + "teal": 1412, + "source": 4, + "pc": [ + 1373 + ] + }, + { + "teal": 1415, "source": 3, "pc": [ - 1372, - 1373, 1374, 1375, 1376, - 1377 + 1377, + 1378, + 1379 ] }, { - "teal": 1396, + "teal": 1416, "source": 3, "pc": [ - 1378, - 1379, 1380, 1381, - 1382, - 1383 + 1382 ] }, { - "teal": 1397, + "teal": 1417, "source": 3, "pc": [ + 1383, 1384, 1385, - 1386, - 1387, - 1388, - 1389 + 1386 ] }, { - "teal": 1398, + "teal": 1418, + "source": 3, + "pc": [ + 1387 + ] + }, + { + "teal": 1421, "source": 3, "pc": [ + 1388, + 1389, 1390, 1391, 1392, - 1393, - 1394, - 1395 + 1393 ] }, { - "teal": 1399, + "teal": 1422, "source": 3, "pc": [ + 1394, + 1395, 1396, 1397, 1398, - 1399, - 1400, - 1401 + 1399 ] }, { - "teal": 1400, + "teal": 1423, "source": 3, "pc": [ + 1400, + 1401, 1402, 1403, - 1404 + 1404, + 1405 ] }, { - "teal": 1401, + "teal": 1424, "source": 3, "pc": [ - 1405, 1406, 1407, 1408, 1409, 1410, - 1411, + 1411 + ] + }, + { + "teal": 1425, + "source": 3, + "pc": [ 1412, 1413, 1414, 1415, 1416, - 1417, - 1418, - 1419, - 1420, - 1421, - 1422 + 1417 ] }, { - "teal": 1402, + "teal": 1426, "source": 3, "pc": [ + 1418, + 1419, + 1420, + 1421, + 1422, 1423 ] }, { - "teal": 1405, + "teal": 1427, "source": 3, "pc": [ 1424, @@ -5786,29 +5864,93 @@ ] }, { - "teal": 1406, + "teal": 1428, "source": 3, "pc": [ 1430, 1431, - 1432 + 1432, + 1433, + 1434, + 1435 ] }, { - "teal": 1407, + "teal": 1429, "source": 3, "pc": [ - 1433, - 1434, - 1435, - 1436 + 1436, + 1437, + 1438 ] }, { - "teal": 1408, + "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": [ - 1437 + 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 77daa0261..a29800ab5 100644 --- a/assets/arc-0059/contracts/clients/Arc59Client.ts +++ b/assets/arc-0059/contracts/clients/Arc59Client.ts @@ -103,7 +103,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgLSBhbGdvQ29uc3VtZWRCeUNsYWltCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0CgktCglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NQoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTkKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTcyCgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzcKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzgKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc5CgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NAoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODcKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MQoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NAoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk1CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNQoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA2CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA5CgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI3CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMgoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDMKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDQKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NwoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzEKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkwX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTBfZW5kCgoqdGVybmFyeTBfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5MF9lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTUKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk3CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAxCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/clients/MutableARC59Client.ts b/assets/arc-0059/contracts/clients/MutableARC59Client.ts index 0a3ec641a..47c330ca9 100644 --- a/assets/arc-0059/contracts/clients/MutableARC59Client.ts +++ b/assets/arc-0059/contracts/clients/MutableARC59Client.ts @@ -108,7 +108,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gKmlmOF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlIDwgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCTwKCWJ6ICppZjhfZW5kCgoJLy8gKmlmOF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTUKCS8vIGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0gLT0gaW5ib3hBbGdvQXZhaWxhYmxlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY4X2VuZDoKCippZjdfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU5CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCiphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDgKCXJldHN1YgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQ6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGF4ZmVyOiBheGZlcgoJdHhuIEdyb3VwSW5kZXgKCWludCAxCgktCglkdXAKCWd0eG5zIFR5cGVFbnVtCglpbnQgYXhmZXIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCgljYWxsc3ViIGFyYzU5X3NlbmRBc3NldAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcjogQXNzZXRUcmFuc2ZlclR4biwgcmVjZWl2ZXI6IEFkZHJlc3MsIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQpOiBBZGRyZXNzCi8vCi8vIFNlbmQgYW4gYXNzZXQgdG8gdGhlIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBzZW5kIHRoZSBhc3NldCB0bwovLyBAcGFyYW0gYXhmZXIgVGhlIGFzc2V0IHRyYW5zZmVyIHRvIHRoaXMgYXBwCi8vIEBwYXJhbSBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyBUaGUgYW1vdW50IG9mIEFMR08gdG8gc2VuZCB0byB0aGUgcmVjZWl2ZXIvaW5ib3ggaW4gYWRkaXRpb24gdG8gdGhlIE1CUgovLwovLyBAcmV0dXJucyBUaGUgYWRkcmVzcyB0aGF0IHRoZSBhc3NldCB3YXMgc2VudCB0byAoZWl0aGVyIHRoZSByZWNlaXZlciBvciB0aGVpciBpbmJveCkKYXJjNTlfc2VuZEFzc2V0OgoJcHJvdG8gMyAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gMgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3MgoJLy8gdmVyaWZ5QXNzZXRUcmFuc2ZlclR4bihheGZlciwgewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICB9KQoJLy8gdmVyaWZ5IGFzc2V0UmVjZWl2ZXIKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRSZWNlaXZlcgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCT09Cglhc3NlcnQKCgkvLyAqaWY5X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc3CgkvLyByZWNlaXZlci5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCglieiAqaWY5X2VuZAoKCS8vICppZjlfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTBfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODQKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMF9lbmQKCgkvLyAqaWYxMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODYKCS8vIHJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTEKCS8vIHJldHVybiByZWNlaXZlcjsKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYiAqYXJjNTlfc2VuZEFzc2V0KnJldHVybgoKKmlmOV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTQKCS8vIGluYm94RXhpc3RlZCA9IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NQoJLy8gaW5ib3ggPSB0aGlzLmFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXIpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJZnJhbWVfYnVyeSAxIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmMTFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjExX2VuZDoKCS8vICppZjEyX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA0CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxM19lbmQ6CgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOQoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTAKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE3CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIwCgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMl9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjYKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzIKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfc2VuZEFzc2V0KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoKCS8vIHBvcCBhbGwgbG9jYWwgdmFyaWFibGVzIGZyb20gdGhlIHN0YWNrCglwb3BuIDIKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW0odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbToKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbQoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW0oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBDbGFpbSBhbiBBU0EgZnJvbSB0aGUgaW5ib3gKLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIGNsYWltCmFyYzU5X2NsYWltOgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ2CgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ4CgkvLyBhc3NldENsb3NlVG86IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjUxCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTIKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3Q6CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X3JlamVjdAoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfcmVqZWN0KGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gUmVqZWN0IHRoZSBBU0EgYnkgY2xvc2luZyBpdCBvdXQgdG8gdGhlIEFTQSBjcmVhdG9yLiBBbHdheXMgc2VuZHMgdHdvIGlubmVyIHRyYW5zYWN0aW9ucy4KLy8gQWxsIG5vbi1NQlIgQUxHTyBiYWxhbmNlIGluIHRoZSBpbmJveCB3aWxsIGJlIHNlbnQgdG8gdGhlIGNhbGxlci4KLy8KLy8gQHBhcmFtIGFzYSBUaGUgQVNBIHRvIHJlamVjdAphcmM1OV9yZWplY3Q6Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2NQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvciwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY4CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzIKCS8vIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc2CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3g6CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0SW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRJbmJveChyZWNlaXZlcjogQWRkcmVzcyk6IEFkZHJlc3MKLy8KLy8gR2V0IHRoZSBpbmJveCBhZGRyZXNzIGZvciB0aGUgZ2l2ZW4gcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSByZWNlaXZlciB0byBnZXQgdGhlIGluYm94IGZvcgovLwovLyBAcmV0dXJucyBaZXJvIGFkZHJlc3MgaWYgdGhlIHJlY2VpdmVyIGRvZXMgbm90IHlldCBoYXZlIGFuIGluYm94LCBvdGhlcndpc2UgdGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0SW5ib3g6Cglwcm90byAxIDEKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTAKCS8vIHJldHVybiB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cyA/IHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgOiBnbG9iYWxzLnplcm9BZGRyZXNzOwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICp0ZXJuYXJ5MF9mYWxzZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWIgKnRlcm5hcnkwX2VuZAoKKnRlcm5hcnkwX2ZhbHNlOgoJZ2xvYmFsIFplcm9BZGRyZXNzCgoqdGVybmFyeTBfZW5kOgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ286CgkvLyBleGVjdXRlIGFyYzU5X2NsYWltQWxnbygpdm9pZAoJY2FsbHN1YiBhcmM1OV9jbGFpbUFsZ28KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltQWxnbygpOiB2b2lkCi8vCi8vIENsYWltIGFueSBleHRyYSBhbGdvIGZyb20gdGhlIGluYm94CmFyYzU5X2NsYWltQWxnbzoKCXByb3RvIDAgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk1CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gYXNzZXJ0KGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlICE9PSAwKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWludCAwCgkhPQoJYXNzZXJ0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX3VwZGF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSB1cGRhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiB1cGRhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gdXBkYXRlQXBwbGljYXRpb24oKTogdm9pZAp1cGRhdGVBcHBsaWNhdGlvbjoKCXByb3RvIDAgMAoKCS8vIGNvbnRyYWN0cy9tdXRhYmxlX2FyYzU5LmFsZ28udHM6NQoJLy8gYXNzZXJ0KHRoaXMudHhuLnNlbmRlciA9PT0gdGhpcy5hcHAuY3JlYXRvcikKCXR4biBTZW5kZXIKCXR4bmEgQXBwbGljYXRpb25zIDAKCWFwcF9wYXJhbXNfZ2V0IEFwcENyZWF0b3IKCXBvcAoJPT0KCWFzc2VydAoJcmV0c3ViCgoqY3JlYXRlX05vT3A6CgltZXRob2QgImNyZWF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbgoJZXJyCgoqY2FsbF9Ob09wOgoJbWV0aG9kICJhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpIgoJbWV0aG9kICJhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW0odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X3JlamVjdCh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbUFsZ28oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2FyYzU5X29wdFJvdXRlckluICphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm8gKmFiaV9yb3V0ZV9hcmM1OV9zZW5kQXNzZXQgKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbSAqYWJpX3JvdXRlX2FyYzU5X3JlamVjdCAqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94ICphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvCgllcnIKCipjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uOgoJbWV0aG9kICJ1cGRhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb24KCWVycg==", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { From 671a7ed99a1dd4ff5f9449be1b0335f8e268a541 Mon Sep 17 00:00:00 2001 From: Joe Polny Date: Fri, 1 Nov 2024 15:49:15 -0400 Subject: [PATCH 6/6] send additionalReceiverFunds to inbox after MBR payment --- assets/arc-0059/contracts/arc59.algo.ts | 14 +- .../contracts/artifacts/ARC59.approval.teal | 126 ++--- .../contracts/artifacts/ARC59.arc32.json | 2 +- .../contracts/artifacts/ARC59.src_map.json | 446 +++++++++--------- .../artifacts/MutableARC59.approval.teal | 126 ++--- .../artifacts/MutableARC59.arc32.json | 2 +- .../artifacts/MutableARC59.src_map.json | 310 ++++++------ .../arc-0059/contracts/clients/Arc59Client.ts | 2 +- .../contracts/clients/MutableARC59Client.ts | 2 +- 9 files changed, 515 insertions(+), 515 deletions(-) diff --git a/assets/arc-0059/contracts/arc59.algo.ts b/assets/arc-0059/contracts/arc59.algo.ts index a47f82e4d..ed042f3f5 100644 --- a/assets/arc-0059/contracts/arc59.algo.ts +++ b/assets/arc-0059/contracts/arc59.algo.ts @@ -196,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; @@ -231,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 9db257d23..8a9281a4f 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/ARC59.approval.teal @@ -836,42 +836,6 @@ arc59_sendAsset: // *if11_condition // contracts/arc59.algo.ts:199 - // additionalReceiverFunds !== 0 - frame_dig -3 // additionalReceiverFunds: uint64 - int 0 - != - bz *if11_end - - // *if11_consequent - // contracts/arc59.algo.ts:200 - // sendPayment({ - // receiver: inbox, - // amount: additionalReceiverFunds, - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/arc59.algo.ts:201 - // receiver: inbox - frame_dig 1 // inbox: address - itxn_field Receiver - - // contracts/arc59.algo.ts:202 - // 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 - -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:206 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -880,32 +844,32 @@ arc59_sendAsset: swap pop ! - bz *if12_end + bz *if11_end - // *if12_consequent - // contracts/arc59.algo.ts:207 + // *if11_consequent + // contracts/arc59.algo.ts:200 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if13_condition - // contracts/arc59.algo.ts:208 + // *if12_condition + // contracts/arc59.algo.ts:201 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if13_end + bz *if12_end - // *if13_consequent - // contracts/arc59.algo.ts:208 + // *if12_consequent + // contracts/arc59.algo.ts:201 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if13_end: - // *if14_condition - // contracts/arc59.algo.ts:211 +*if12_end: + // *if13_condition + // contracts/arc59.algo.ts:204 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -916,10 +880,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if14_end + bz *if13_end - // *if14_consequent - // contracts/arc59.algo.ts:212 + // *if13_consequent + // contracts/arc59.algo.ts:205 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -928,12 +892,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:206 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:214 + // contracts/arc59.algo.ts:207 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -945,8 +909,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if14_end: - // contracts/arc59.algo.ts:219 +*if13_end: + // contracts/arc59.algo.ts:212 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -957,22 +921,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:220 + // contracts/arc59.algo.ts:213 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:221 + // contracts/arc59.algo.ts:214 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:222 + // contracts/arc59.algo.ts:215 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:223 + // contracts/arc59.algo.ts:216 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -985,8 +949,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:228 +*if11_end: + // contracts/arc59.algo.ts:221 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -996,18 +960,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:222 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:223 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:224 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -1020,6 +984,42 @@ arc59_sendAsset: // Submit inner transaction itxn_submit + // *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 diff --git a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json index 14c9d204c..711807630 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.arc32.json @@ -74,7 +74,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxMl9lbmQ6CgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTNfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json index a7aff61dc..31a24daeb 100644 --- a/assets/arc-0059/contracts/artifacts/ARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/ARC59.src_map.json @@ -3771,597 +3771,597 @@ "teal": 841, "source": 199, "pc": [ - 948 + 948, + 949 ] }, { "teal": 842, "source": 199, "pc": [ - 949 + 950, + 951 ] }, { "teal": 843, "source": 199, "pc": [ - 950, - 951, - 952 - ] - }, - { - "teal": 851, - "source": 200, - "pc": [ + 952, 953 ] }, { - "teal": 852, - "source": 200, + "teal": 844, + "source": 199, "pc": [ 954 ] }, { - "teal": 853, - "source": 200, + "teal": 845, + "source": 199, "pc": [ - 955, - 956 + 955 ] }, { - "teal": 857, - "source": 201, + "teal": 846, + "source": 199, "pc": [ - 957, - 958 + 956 ] }, { - "teal": 858, - "source": 201, + "teal": 847, + "source": 199, "pc": [ - 959, - 960 + 957, + 958, + 959 ] }, { - "teal": 862, - "source": 202, + "teal": 852, + "source": 200, "pc": [ - 961, - 962 + 960, + 961 ] }, { - "teal": 863, - "source": 202, + "teal": 853, + "source": 200, "pc": [ - 963, - 964 + 962, + 963 ] }, { - "teal": 866, - "source": 200, + "teal": 858, + "source": 201, "pc": [ + 964, 965 ] }, { - "teal": 867, - "source": 200, + "teal": 859, + "source": 201, "pc": [ - 966, - 967 + 966 ] }, { - "teal": 870, - "source": 200, + "teal": 860, + "source": 201, "pc": [ - 968 + 967, + 968, + 969 ] }, { - "teal": 876, - "source": 206, + "teal": 865, + "source": 201, "pc": [ - 969, - 970 + 970, + 971 ] }, { - "teal": 877, - "source": 206, + "teal": 866, + "source": 201, "pc": [ - 971, - 972 + 972, + 973 ] }, { - "teal": 878, - "source": 206, + "teal": 867, + "source": 201, "pc": [ - 973, 974 ] }, { - "teal": 879, - "source": 206, + "teal": 868, + "source": 201, "pc": [ 975, 976 ] }, { - "teal": 880, - "source": 206, + "teal": 874, + "source": 204, "pc": [ - 977 + 977, + 978 ] }, { - "teal": 881, - "source": 206, + "teal": 875, + "source": 204, "pc": [ - 978 + 979, + 980 ] }, { - "teal": 882, - "source": 206, + "teal": 876, + "source": 204, "pc": [ - 979 + 981 ] }, { - "teal": 883, - "source": 206, + "teal": 877, + "source": 204, "pc": [ - 980, - 981, - 982 + 982, + 983 ] }, { - "teal": 888, - "source": 207, + "teal": 878, + "source": 204, "pc": [ - 983, - 984 + 984, + 985 ] }, { - "teal": 889, - "source": 207, + "teal": 879, + "source": 204, "pc": [ - 985, 986 ] }, { - "teal": 894, - "source": 208, + "teal": 880, + "source": 204, "pc": [ 987, 988 ] }, { - "teal": 895, - "source": 208, + "teal": 881, + "source": 204, "pc": [ 989 ] }, { - "teal": 896, - "source": 208, + "teal": 882, + "source": 204, + "pc": [ + 990 + ] + }, + { + "teal": 883, + "source": 204, "pc": [ - 990, 991, - 992 + 992, + 993 ] }, { - "teal": 901, - "source": 208, + "teal": 891, + "source": 205, "pc": [ - 993, 994 ] }, { - "teal": 902, - "source": 208, + "teal": 892, + "source": 205, "pc": [ - 995, - 996 + 995 ] }, { - "teal": 903, - "source": 208, + "teal": 893, + "source": 205, "pc": [ + 996, 997 ] }, { - "teal": 904, - "source": 208, + "teal": 897, + "source": 206, "pc": [ 998, 999 ] }, { - "teal": 910, - "source": 211, + "teal": 898, + "source": 206, "pc": [ 1000, 1001 ] }, { - "teal": 911, - "source": 211, + "teal": 902, + "source": 207, "pc": [ 1002, 1003 ] }, { - "teal": 912, - "source": 211, + "teal": 903, + "source": 207, "pc": [ - 1004 + 1004, + 1005 ] }, { - "teal": 913, - "source": 211, + "teal": 906, + "source": 205, "pc": [ - 1005, 1006 ] }, { - "teal": 914, - "source": 211, + "teal": 907, + "source": 205, "pc": [ 1007, 1008 ] }, { - "teal": 915, - "source": 211, + "teal": 910, + "source": 205, "pc": [ 1009 ] }, { - "teal": 916, - "source": 211, + "teal": 920, + "source": 212, "pc": [ - 1010, - 1011 + 1010 ] }, { - "teal": 917, - "source": 211, + "teal": 921, + "source": 212, "pc": [ - 1012 + 1011 ] }, { - "teal": 918, - "source": 211, + "teal": 922, + "source": 212, "pc": [ + 1012, 1013 ] }, { - "teal": 919, - "source": 211, + "teal": 926, + "source": 213, "pc": [ 1014, - 1015, - 1016 + 1015 ] }, { "teal": 927, - "source": 212, + "source": 213, "pc": [ + 1016, 1017 ] }, { - "teal": 928, - "source": 212, + "teal": 931, + "source": 214, "pc": [ - 1018 + 1018, + 1019 ] }, { - "teal": 929, - "source": 212, + "teal": 932, + "source": 214, "pc": [ - 1019, - 1020 + 1020, + 1021 ] }, { - "teal": 933, - "source": 213, + "teal": 936, + "source": 215, "pc": [ - 1021, 1022 ] }, { - "teal": 934, - "source": 213, + "teal": 937, + "source": 215, "pc": [ 1023, 1024 ] }, { - "teal": 938, - "source": 214, + "teal": 941, + "source": 216, "pc": [ 1025, 1026 ] }, { - "teal": 939, - "source": 214, + "teal": 942, + "source": 216, "pc": [ 1027, 1028 ] }, { - "teal": 942, - "source": 212, + "teal": 943, + "source": 216, "pc": [ - 1029 + 1029, + 1030 ] }, { - "teal": 943, + "teal": 946, "source": 212, "pc": [ - 1030, 1031 ] }, { - "teal": 946, + "teal": 947, "source": 212, "pc": [ - 1032 + 1032, + 1033 ] }, { - "teal": 956, - "source": 219, + "teal": 950, + "source": 212, "pc": [ - 1033 + 1034 ] }, { - "teal": 957, - "source": 219, + "teal": 959, + "source": 221, "pc": [ - 1034 + 1035 ] }, { - "teal": 958, - "source": 219, + "teal": 960, + "source": 221, "pc": [ - 1035, 1036 ] }, { - "teal": 962, - "source": 220, + "teal": 961, + "source": 221, "pc": [ 1037, 1038 ] }, { - "teal": 963, - "source": 220, + "teal": 965, + "source": 222, "pc": [ 1039, 1040 ] }, { - "teal": 967, - "source": 221, + "teal": 966, + "source": 222, "pc": [ 1041, 1042 ] }, { - "teal": 968, - "source": 221, + "teal": 970, + "source": 223, "pc": [ 1043, 1044 ] }, { - "teal": 972, - "source": 222, - "pc": [ - 1045 - ] - }, - { - "teal": 973, - "source": 222, + "teal": 971, + "source": 223, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 977, + "teal": 972, "source": 223, "pc": [ - 1048, - 1049 + 1047, + 1048 ] }, { - "teal": 978, - "source": 223, + "teal": 976, + "source": 224, "pc": [ - 1050, - 1051 + 1049, + 1050 ] }, { - "teal": 979, - "source": 223, + "teal": 977, + "source": 224, "pc": [ - 1052, - 1053 + 1051, + 1052 ] }, { - "teal": 982, - "source": 219, + "teal": 978, + "source": 224, "pc": [ + 1053, 1054 ] }, { - "teal": 983, - "source": 219, + "teal": 981, + "source": 221, "pc": [ - 1055, - 1056 + 1055 ] }, { - "teal": 986, - "source": 219, + "teal": 982, + "source": 221, "pc": [ + 1056, 1057 ] }, { - "teal": 995, - "source": 228, + "teal": 985, + "source": 221, "pc": [ 1058 ] }, { - "teal": 996, - "source": 228, + "teal": 990, + "source": 227, "pc": [ - 1059 + 1059, + 1060 ] }, { - "teal": 997, - "source": 228, + "teal": 991, + "source": 227, "pc": [ - 1060, 1061 ] }, { - "teal": 1001, - "source": 229, + "teal": 992, + "source": 227, "pc": [ - 1062, - 1063 + 1062 ] }, { - "teal": 1002, - "source": 229, + "teal": 993, + "source": 227, "pc": [ + 1063, 1064, 1065 ] }, { - "teal": 1006, - "source": 230, + "teal": 1001, + "source": 228, + "pc": [ + 1066 + ] + }, + { + "teal": 1002, + "source": 228, "pc": [ - 1066, 1067 ] }, { - "teal": 1007, - "source": 230, + "teal": 1003, + "source": 228, "pc": [ 1068, 1069 ] }, { - "teal": 1008, - "source": 230, + "teal": 1007, + "source": 229, "pc": [ 1070, 1071 ] }, { - "teal": 1012, - "source": 231, + "teal": 1008, + "source": 229, "pc": [ 1072, 1073 ] }, { - "teal": 1013, - "source": 231, + "teal": 1012, + "source": 230, "pc": [ 1074, 1075 ] }, { - "teal": 1014, - "source": 231, + "teal": 1013, + "source": 230, "pc": [ 1076, 1077 ] }, { - "teal": 1017, + "teal": 1016, "source": 228, "pc": [ 1078 ] }, { - "teal": 1018, + "teal": 1017, "source": 228, "pc": [ 1079, @@ -4369,7 +4369,7 @@ ] }, { - "teal": 1021, + "teal": 1020, "source": 228, "pc": [ 1081 diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal index c28b95f74..0487ef280 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.approval.teal @@ -836,42 +836,6 @@ arc59_sendAsset: // *if11_condition // contracts/arc59.algo.ts:199 - // additionalReceiverFunds !== 0 - frame_dig -3 // additionalReceiverFunds: uint64 - int 0 - != - bz *if11_end - - // *if11_consequent - // contracts/arc59.algo.ts:200 - // sendPayment({ - // receiver: inbox, - // amount: additionalReceiverFunds, - // }) - itxn_begin - int pay - itxn_field TypeEnum - - // contracts/arc59.algo.ts:201 - // receiver: inbox - frame_dig 1 // inbox: address - itxn_field Receiver - - // contracts/arc59.algo.ts:202 - // 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 - -*if11_end: - // *if12_condition - // contracts/arc59.algo.ts:206 // !inbox.isOptedInToAsset(axfer.xferAsset) frame_dig 1 // inbox: address frame_dig -1 // axfer: AssetTransferTxn @@ -880,32 +844,32 @@ arc59_sendAsset: swap pop ! - bz *if12_end + bz *if11_end - // *if12_consequent - // contracts/arc59.algo.ts:207 + // *if11_consequent + // contracts/arc59.algo.ts:200 // inboxMbrDelta = globals.assetOptInMinBalance global AssetOptInMinBalance frame_bury 2 // inboxMbrDelta: uint64 - // *if13_condition - // contracts/arc59.algo.ts:208 + // *if12_condition + // contracts/arc59.algo.ts:201 // !inboxExisted frame_dig 0 // inboxExisted: bool ! - bz *if13_end + bz *if12_end - // *if13_consequent - // contracts/arc59.algo.ts:208 + // *if12_consequent + // contracts/arc59.algo.ts:201 // inboxMbrDelta += globals.minBalance frame_dig 2 // inboxMbrDelta: uint64 global MinBalance + frame_bury 2 // inboxMbrDelta: uint64 -*if13_end: - // *if14_condition - // contracts/arc59.algo.ts:211 +*if12_end: + // *if13_condition + // contracts/arc59.algo.ts:204 // inbox.balance < inbox.minBalance + inboxMbrDelta frame_dig 1 // inbox: address acct_params_get AcctBalance @@ -916,10 +880,10 @@ arc59_sendAsset: frame_dig 2 // inboxMbrDelta: uint64 + < - bz *if14_end + bz *if13_end - // *if14_consequent - // contracts/arc59.algo.ts:212 + // *if13_consequent + // contracts/arc59.algo.ts:205 // sendPayment({ // receiver: inbox, // amount: inboxMbrDelta, @@ -928,12 +892,12 @@ arc59_sendAsset: int pay itxn_field TypeEnum - // contracts/arc59.algo.ts:213 + // contracts/arc59.algo.ts:206 // receiver: inbox frame_dig 1 // inbox: address itxn_field Receiver - // contracts/arc59.algo.ts:214 + // contracts/arc59.algo.ts:207 // amount: inboxMbrDelta frame_dig 2 // inboxMbrDelta: uint64 itxn_field Amount @@ -945,8 +909,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if14_end: - // contracts/arc59.algo.ts:219 +*if13_end: + // contracts/arc59.algo.ts:212 // sendAssetTransfer({ // sender: inbox, // assetReceiver: inbox, @@ -957,22 +921,22 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:220 + // contracts/arc59.algo.ts:213 // sender: inbox frame_dig 1 // inbox: address itxn_field Sender - // contracts/arc59.algo.ts:221 + // contracts/arc59.algo.ts:214 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:222 + // contracts/arc59.algo.ts:215 // assetAmount: 0 int 0 itxn_field AssetAmount - // contracts/arc59.algo.ts:223 + // contracts/arc59.algo.ts:216 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -985,8 +949,8 @@ arc59_sendAsset: // Submit inner transaction itxn_submit -*if12_end: - // contracts/arc59.algo.ts:228 +*if11_end: + // contracts/arc59.algo.ts:221 // sendAssetTransfer({ // assetReceiver: inbox, // assetAmount: axfer.assetAmount, @@ -996,18 +960,18 @@ arc59_sendAsset: int axfer itxn_field TypeEnum - // contracts/arc59.algo.ts:229 + // contracts/arc59.algo.ts:222 // assetReceiver: inbox frame_dig 1 // inbox: address itxn_field AssetReceiver - // contracts/arc59.algo.ts:230 + // contracts/arc59.algo.ts:223 // assetAmount: axfer.assetAmount frame_dig -1 // axfer: AssetTransferTxn gtxns AssetAmount itxn_field AssetAmount - // contracts/arc59.algo.ts:231 + // contracts/arc59.algo.ts:224 // xferAsset: axfer.xferAsset frame_dig -1 // axfer: AssetTransferTxn gtxns XferAsset @@ -1020,6 +984,42 @@ arc59_sendAsset: // Submit inner transaction itxn_submit + // *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 diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json index e0f326bd4..c0c0f9981 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.arc32.json @@ -79,7 +79,7 @@ } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTJfZW5kOgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json index 295b0259e..cb7df17a1 100644 --- a/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json +++ b/assets/arc-0059/contracts/artifacts/MutableARC59.src_map.json @@ -3771,127 +3771,121 @@ "teal": 841, "source": 8, "pc": [ - 948 - ] - }, - { - "teal": 842, - "source": 8, - "pc": [ + 948, 949 ] }, { - "teal": 843, + "teal": 842, "source": 8, "pc": [ 950, - 951, - 952 + 951 ] }, { - "teal": 851, + "teal": 843, "source": 8, "pc": [ + 952, 953 ] }, { - "teal": 852, + "teal": 844, "source": 8, "pc": [ 954 ] }, { - "teal": 853, + "teal": 845, "source": 8, "pc": [ - 955, - 956 + 955 ] }, { - "teal": 857, + "teal": 846, "source": 8, "pc": [ - 957, - 958 + 956 ] }, { - "teal": 858, + "teal": 847, "source": 8, "pc": [ - 959, - 960 + 957, + 958, + 959 ] }, { - "teal": 862, + "teal": 852, "source": 8, "pc": [ - 961, - 962 + 960, + 961 ] }, { - "teal": 863, + "teal": 853, "source": 8, "pc": [ - 963, - 964 + 962, + 963 ] }, { - "teal": 866, + "teal": 858, "source": 8, "pc": [ + 964, 965 ] }, { - "teal": 867, + "teal": 859, "source": 8, "pc": [ - 966, - 967 + 966 ] }, { - "teal": 870, + "teal": 860, "source": 8, "pc": [ - 968 + 967, + 968, + 969 ] }, { - "teal": 876, + "teal": 865, "source": 8, "pc": [ - 969, - 970 + 970, + 971 ] }, { - "teal": 877, + "teal": 866, "source": 8, "pc": [ - 971, - 972 + 972, + 973 ] }, { - "teal": 878, + "teal": 867, "source": 8, "pc": [ - 973, 974 ] }, { - "teal": 879, + "teal": 868, "source": 8, "pc": [ 975, @@ -3899,53 +3893,53 @@ ] }, { - "teal": 880, + "teal": 874, "source": 8, "pc": [ - 977 + 977, + 978 ] }, { - "teal": 881, + "teal": 875, "source": 8, "pc": [ - 978 + 979, + 980 ] }, { - "teal": 882, + "teal": 876, "source": 8, "pc": [ - 979 + 981 ] }, { - "teal": 883, + "teal": 877, "source": 8, "pc": [ - 980, - 981, - 982 + 982, + 983 ] }, { - "teal": 888, + "teal": 878, "source": 8, "pc": [ - 983, - 984 + 984, + 985 ] }, { - "teal": 889, + "teal": 879, "source": 8, "pc": [ - 985, 986 ] }, { - "teal": 894, + "teal": 880, "source": 8, "pc": [ 987, @@ -3953,46 +3947,52 @@ ] }, { - "teal": 895, + "teal": 881, "source": 8, "pc": [ 989 ] }, { - "teal": 896, + "teal": 882, + "source": 8, + "pc": [ + 990 + ] + }, + { + "teal": 883, "source": 8, "pc": [ - 990, 991, - 992 + 992, + 993 ] }, { - "teal": 901, + "teal": 891, "source": 8, "pc": [ - 993, 994 ] }, { - "teal": 902, + "teal": 892, "source": 8, "pc": [ - 995, - 996 + 995 ] }, { - "teal": 903, + "teal": 893, "source": 8, "pc": [ + 996, 997 ] }, { - "teal": 904, + "teal": 897, "source": 8, "pc": [ 998, @@ -4000,7 +4000,7 @@ ] }, { - "teal": 910, + "teal": 898, "source": 8, "pc": [ 1000, @@ -4008,7 +4008,7 @@ ] }, { - "teal": 911, + "teal": 902, "source": 8, "pc": [ 1002, @@ -4016,22 +4016,22 @@ ] }, { - "teal": 912, + "teal": 903, "source": 8, "pc": [ - 1004 + 1004, + 1005 ] }, { - "teal": 913, + "teal": 906, "source": 8, "pc": [ - 1005, 1006 ] }, { - "teal": 914, + "teal": 907, "source": 8, "pc": [ 1007, @@ -4039,75 +4039,75 @@ ] }, { - "teal": 915, + "teal": 910, "source": 8, "pc": [ 1009 ] }, { - "teal": 916, + "teal": 920, "source": 8, "pc": [ - 1010, - 1011 + 1010 ] }, { - "teal": 917, + "teal": 921, "source": 8, "pc": [ - 1012 + 1011 ] }, { - "teal": 918, + "teal": 922, "source": 8, "pc": [ + 1012, 1013 ] }, { - "teal": 919, + "teal": 926, "source": 8, "pc": [ 1014, - 1015, - 1016 + 1015 ] }, { "teal": 927, "source": 8, "pc": [ + 1016, 1017 ] }, { - "teal": 928, + "teal": 931, "source": 8, "pc": [ - 1018 + 1018, + 1019 ] }, { - "teal": 929, + "teal": 932, "source": 8, "pc": [ - 1019, - 1020 + 1020, + 1021 ] }, { - "teal": 933, + "teal": 936, "source": 8, "pc": [ - 1021, 1022 ] }, { - "teal": 934, + "teal": 937, "source": 8, "pc": [ 1023, @@ -4115,7 +4115,7 @@ ] }, { - "teal": 938, + "teal": 941, "source": 8, "pc": [ 1025, @@ -4123,7 +4123,7 @@ ] }, { - "teal": 939, + "teal": 942, "source": 8, "pc": [ 1027, @@ -4131,51 +4131,51 @@ ] }, { - "teal": 942, + "teal": 943, "source": 8, "pc": [ - 1029 + 1029, + 1030 ] }, { - "teal": 943, + "teal": 946, "source": 8, "pc": [ - 1030, 1031 ] }, { - "teal": 946, + "teal": 947, "source": 8, "pc": [ - 1032 + 1032, + 1033 ] }, { - "teal": 956, + "teal": 950, "source": 8, "pc": [ - 1033 + 1034 ] }, { - "teal": 957, + "teal": 959, "source": 8, "pc": [ - 1034 + 1035 ] }, { - "teal": 958, + "teal": 960, "source": 8, "pc": [ - 1035, 1036 ] }, { - "teal": 962, + "teal": 961, "source": 8, "pc": [ 1037, @@ -4183,7 +4183,7 @@ ] }, { - "teal": 963, + "teal": 965, "source": 8, "pc": [ 1039, @@ -4191,7 +4191,7 @@ ] }, { - "teal": 967, + "teal": 966, "source": 8, "pc": [ 1041, @@ -4199,7 +4199,7 @@ ] }, { - "teal": 968, + "teal": 970, "source": 8, "pc": [ 1043, @@ -4207,114 +4207,114 @@ ] }, { - "teal": 972, - "source": 8, - "pc": [ - 1045 - ] - }, - { - "teal": 973, + "teal": 971, "source": 8, "pc": [ - 1046, - 1047 + 1045, + 1046 ] }, { - "teal": 977, + "teal": 972, "source": 8, "pc": [ - 1048, - 1049 + 1047, + 1048 ] }, { - "teal": 978, + "teal": 976, "source": 8, "pc": [ - 1050, - 1051 + 1049, + 1050 ] }, { - "teal": 979, + "teal": 977, "source": 8, "pc": [ - 1052, - 1053 + 1051, + 1052 ] }, { - "teal": 982, + "teal": 978, "source": 8, "pc": [ + 1053, 1054 ] }, { - "teal": 983, + "teal": 981, "source": 8, "pc": [ - 1055, - 1056 + 1055 ] }, { - "teal": 986, + "teal": 982, "source": 8, "pc": [ + 1056, 1057 ] }, { - "teal": 995, + "teal": 985, "source": 8, "pc": [ 1058 ] }, { - "teal": 996, + "teal": 990, "source": 8, "pc": [ - 1059 + 1059, + 1060 ] }, { - "teal": 997, + "teal": 991, "source": 8, "pc": [ - 1060, 1061 ] }, { - "teal": 1001, + "teal": 992, "source": 8, "pc": [ - 1062, - 1063 + 1062 ] }, { - "teal": 1002, + "teal": 993, "source": 8, "pc": [ + 1063, 1064, 1065 ] }, { - "teal": 1006, + "teal": 1001, + "source": 8, + "pc": [ + 1066 + ] + }, + { + "teal": 1002, "source": 8, "pc": [ - 1066, 1067 ] }, { - "teal": 1007, + "teal": 1003, "source": 8, "pc": [ 1068, @@ -4322,7 +4322,7 @@ ] }, { - "teal": 1008, + "teal": 1007, "source": 8, "pc": [ 1070, @@ -4330,7 +4330,7 @@ ] }, { - "teal": 1012, + "teal": 1008, "source": 8, "pc": [ 1072, @@ -4338,7 +4338,7 @@ ] }, { - "teal": 1013, + "teal": 1012, "source": 8, "pc": [ 1074, @@ -4346,7 +4346,7 @@ ] }, { - "teal": 1014, + "teal": 1013, "source": 8, "pc": [ 1076, @@ -4354,14 +4354,14 @@ ] }, { - "teal": 1017, + "teal": 1016, "source": 8, "pc": [ 1078 ] }, { - "teal": 1018, + "teal": 1017, "source": 8, "pc": [ 1079, @@ -4369,7 +4369,7 @@ ] }, { - "teal": 1021, + "teal": 1020, "source": 8, "pc": [ 1081 diff --git a/assets/arc-0059/contracts/clients/Arc59Client.ts b/assets/arc-0059/contracts/clients/Arc59Client.ts index a29800ab5..0892056f2 100644 --- a/assets/arc-0059/contracts/clients/Arc59Client.ts +++ b/assets/arc-0059/contracts/clients/Arc59Client.ts @@ -103,7 +103,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcywKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAyCgkvLyBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA3CgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDgKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTNfZW5kOgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTEKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTRfZW5kCgoJLy8gKmlmMTRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTMKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxOQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTJfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI4CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMwCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzEKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqY3JlYXRlX05vT3AgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVECgoqTk9UX0lNUExFTUVOVEVEOgoJZXJyCgovLyBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uOgoJLy8gZXhlY3V0ZSBjcmVhdGVBcHBsaWNhdGlvbigpdm9pZAoJY2FsbHN1YiBjcmVhdGVBcHBsaWNhdGlvbgoJaW50IDEKCXJldHVybgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKTogdm9pZAovLwovLyBEZXBsb3kgQVJDNTkgY29udHJhY3QKY3JlYXRlQXBwbGljYXRpb246Cglwcm90byAwIDAKCXJldHN1YgoKLy8gYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbjoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9vcHRSb3V0ZXJJbih1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9vcHRSb3V0ZXJJbgoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfb3B0Um91dGVySW4oYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBPcHQgdGhlIEFSQzU5IHJvdXRlciBpbnRvIHRoZSBBU0EuIFRoaXMgaXMgcmVxdWlyZWQgYmVmb3JlIHRoaXMgYXBwIGNhbiBiZSB1c2VkIHRvIHNlbmQgdGhlIEFTQSB0byBhbnlvbmUuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBvcHQgaW50bwphcmM1OV9vcHRSb3V0ZXJJbjoKCXByb3RvIDEgMAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUwCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTEKCS8vIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MgoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChhZGRyZXNzKWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfZ2V0T3JDcmVhdGVJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldHMgdGhlIGV4aXN0aW5nIGluYm94IGZvciB0aGUgcmVjZWl2ZXIgb3IgY3JlYXRlcyBhIG5ldyBvbmUgaWYgaXQgZG9lcyBub3QgZXhpc3QKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIGdldCBvciBjcmVhdGUgdGhlIGluYm94IGZvcgovLyBAcmV0dXJucyBUaGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRPckNyZWF0ZUluYm94OgoJcHJvdG8gMSAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyAqaWYwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjQKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKmlmMF9lbmQKCgkvLyAqaWYwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZTsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybgoKKmlmMF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NgoJLy8gaW5ib3ggPSBzZW5kTWV0aG9kQ2FsbDx0eXBlb2YgQ29udHJvbGxlZEFkZHJlc3MucHJvdG90eXBlLm5ldz4oewoJLy8gICAgICAgb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24sCgkvLyAgICAgICBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpLAoJLy8gICAgICAgY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXBwbAoJaXR4bl9maWVsZCBUeXBlRW51bQoJbWV0aG9kICJuZXcoKWFkZHJlc3MiCglpdHhuX2ZpZWxkIEFwcGxpY2F0aW9uQXJncwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY3CgkvLyBvbkNvbXBsZXRpb246IE9uQ29tcGxldGlvbi5EZWxldGVBcHBsaWNhdGlvbgoJaW50IDUgLy8gRGVsZXRlQXBwbGljYXRpb24KCWl0eG5fZmllbGQgT25Db21wbGV0aW9uCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjgKCS8vIGFwcHJvdmFsUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuYXBwcm92YWxQcm9ncmFtKCkKCWJ5dGUgYjY0IENpQUJBVEVZRklFR0N6RVpDSTBNQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQWhBSUFFRlI5OGRZZ0FCRkN3SWtPS0FBR3hJcklRTVFDeUlJRUFzZ0d6TWdxSmdBUldIUy9xTmhvQWpnSC8wd0E9CglpdHhuX2ZpZWxkIEFwcHJvdmFsUHJvZ3JhbQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY5CgkvLyBjbGVhclN0YXRlUHJvZ3JhbTogQ29udHJvbGxlZEFkZHJlc3MuY2xlYXJQcm9ncmFtKCkKCWJ5dGUgYjY0IENnPT0KCWl0eG5fZmllbGQgQ2xlYXJTdGF0ZVByb2dyYW0KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglpdHhuIE51bUxvZ3MKCWludCAxCgktCglpdHhuYXMgTG9ncwoJZXh0cmFjdCA0IDAKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjcyCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gaW5ib3gKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3NAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9nZXRPckNyZWF0ZUluYm94KnJldHVybjoKCS8vIHNldCB0aGUgc3Vicm91dGluZSByZXR1cm4gdmFsdWUKCWZyYW1lX2J1cnkgMAoJcmV0c3ViCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KQoqYWJpX3JvdXRlX2FyYzU5X2dldFNlbmRBc3NldEluZm86CgkvLyBUaGUgQUJJIHJldHVybiBwcmVmaXgKCWJ5dGUgMHgxNTFmN2M3NQoKCS8vIGFzc2V0OiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDIKCWJ0b2kKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKCWNhbGxzdWIgYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbwoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldFNlbmRBc3NldEluZm8ocmVjZWl2ZXI6IEFkZHJlc3MsIGFzc2V0OiBBc3NldElEKTogU2VuZEFzc2V0SW5mbwovLwovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGFzc2V0IFRoZSBhc3NldCB0byBzZW5kCi8vCi8vIEByZXR1cm5zIFJldHVybnMgdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbiBmb3Igc2VuZGluZyBhbiBhc3NldDoKLy8gVGhlIG51bWJlciBvZiBpdHhucyByZXF1aXJlZCwgdGhlIE1CUiByZXF1aXJlZCwgd2hldGhlciB0aGUgcm91dGVyIGlzIG9wdGVkIGluLCB3aGV0aGVyIHRoZSByZWNlaXZlciBpcyBvcHRlZCBpbiwKLy8gYW5kIGhvdyBtdWNoIEFMR08gdGhlIHJlY2VpdmVyIHdvdWxkIG5lZWQgdG8gY2xhaW0gdGhlIGFzc2V0CmFyYzU5X2dldFNlbmRBc3NldEluZm86Cglwcm90byAyIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiA4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODcKCS8vIHJvdXRlck9wdGVkSW4gPSB0aGlzLmFwcC5hZGRyZXNzLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OAoJLy8gcmVjZWl2ZXJPcHRlZEluID0gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChhc3NldCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJZnJhbWVfYnVyeSAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg5CgkvLyBpbmZvOiBTZW5kQXNzZXRJbmZvID0gewoJLy8gICAgICAgaXR4bnM6IDEsCgkvLyAgICAgICBtYnI6IDAsCgkvLyAgICAgICByb3V0ZXJPcHRlZEluOiByb3V0ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJPcHRlZEluOiByZWNlaXZlck9wdGVkSW4sCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbTogMCwKCS8vICAgICAgIHJlY2VpdmVyQWxnb05lZWRlZEZvcldvcnN0Q2FzZUNsYWltOiBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgZ2xvYmFscy5taW5UeG5GZWUsCgkvLyAgICAgfQoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDEwMDAwMDAwMDAwMDAwMDAwCglieXRlIDB4MDAKCWludCAwCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWludCAxCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCXNldGJpdAoJY29uY2F0CglieXRlIDB4MDAwMDAwMDAwMDAwMDAwMAoJY29uY2F0CglnbG9iYWwgTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglpdG9iCgljb25jYXQKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gKmlmMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZWNlaXZlck9wdGVkSW4KCWZyYW1lX2RpZyAxIC8vIHJlY2VpdmVyT3B0ZWRJbjogYm9vbAoJYnogKmlmMV9lbmQKCgkvLyAqaWYxX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjk4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWYxX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMAoJLy8gYWxnb05lZWRlZFRvQ2xhaW0gPSByZWNlaXZlci5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSsKCWZyYW1lX2J1cnkgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CgoJLy8gKmlmMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwMwoJLy8gcmVjZWl2ZXIuYmFsYW5jZSA8IGFsZ29OZWVkZWRUb0NsYWltCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0Cgk8CglieiAqaWYyX2VuZAoKCS8vICppZjJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA0CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltID0gYWxnb05lZWRlZFRvQ2xhaW0gLSByZWNlaXZlci5iYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDE3CglmcmFtZV9kaWcgMyAvLyBhbGdvTmVlZGVkVG9DbGFpbTogdWludDY0CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjJfZW5kOgoJLy8gKmlmM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwOAoJLy8gIXJvdXRlck9wdGVkSW4KCWZyYW1lX2RpZyAwIC8vIHJvdXRlck9wdGVkSW46IGJvb2wKCSEKCWJ6ICppZjNfZW5kCgoJLy8gKmlmM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDkKCS8vIGluZm8ubWJyICs9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgOAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgOCA4CglidG9pCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMAoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmM19lbmQ6CgkvLyAqaWY0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTEzCgkvLyAhdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCgkhCglieiAqaWY0X2VuZAoKCS8vICppZjRfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTE3CgkvLyBpbmZvLml0eG5zICs9IDQKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIwCgkvLyBwcmVNQlIgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9idXJ5IDQgLy8gcHJlTUJSOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjEKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWUgPSBnbG9iYWxzLnplcm9BZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWdsb2JhbCBaZXJvQWRkcmVzcwoJYm94X3B1dAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMgoJLy8gYm94TWJyRGVsdGEgPSBnbG9iYWxzLmN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MubWluQmFsYW5jZSAtIHByZU1CUgoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNCAvLyBwcmVNQlI6IHVpbnQ2NAoJLQoJZnJhbWVfYnVyeSA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjMKCS8vIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZGVsZXRlKCkKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2RlbAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyNgoJLy8gaW5mby5tYnIgKz0gYm94TWJyRGVsdGEgKyBnbG9iYWxzLm1pbkJhbGFuY2UgKyBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZnJhbWVfZGlnIDUgLy8gYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTI4CgkvLyByZXR1cm4gaW5mbzsKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCWIgKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuCgoqaWY0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMQoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSA2IC8vIGluYm94OiBhZGRyZXNzCgoJLy8gKmlmNV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzMwoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0yIC8vIGFzc2V0OiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmNV9lbmQKCgkvLyAqaWY1X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzNQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjZfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzcKCS8vICEoaW5ib3guYmFsYW5jZSA+PSBpbmJveC5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSkKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCT49CgkhCglieiAqaWY2X2VuZAoKCS8vICppZjZfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM5CgkvLyBpbmZvLml0eG5zICs9IDEKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgMQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQyCgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjZfZW5kOgoKKmlmNV9lbmQ6CgkvLyAqaWY3X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTQ3CgkvLyBpbmJveC5iYWxhbmNlID4gaW5ib3gubWluQmFsYW5jZSAmJiBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltICE9PSAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJZHVwCglieiAqc2tpcF9hbmQwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCglpbnQgMAoJIT0KCSYmCgoqc2tpcF9hbmQwOgoJYnogKmlmN19lbmQKCgkvLyAqaWY3X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MgoJLy8gYWxnb0NvbnN1bWVkQnlDbGFpbSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyAoaW5mby5pdHhucyArIDQpICogZ2xvYmFscy5taW5UeG5GZWUKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMCA4CglidG9pCglpbnQgNAoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKgoJKwoJZnJhbWVfYnVyeSA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1MwoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgPyBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSA6IDAKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgk+CglieiAqdGVybmFyeTFfZmFsc2UKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCgliICp0ZXJuYXJ5MV9lbmQKCip0ZXJuYXJ5MV9mYWxzZToKCWludCAwCgoqdGVybmFyeTFfZW5kOgoJZnJhbWVfYnVyeSA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU0CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPSBpbmJveEFsZ29BdmFpbGFibGUgPiBhbGdvQ29uc3VtZWRCeUNsYWltID8gaW5ib3hBbGdvQXZhaWxhYmxlIC0gYWxnb0NvbnN1bWVkQnlDbGFpbSA6IDAKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCT4KCWJ6ICp0ZXJuYXJ5Ml9mYWxzZQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCWZyYW1lX2RpZyA3IC8vIGFsZ29Db25zdW1lZEJ5Q2xhaW06IHVpbnQ2NAoJLQoJYiAqdGVybmFyeTJfZW5kCgoqdGVybmFyeTJfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkyX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vICppZjhfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTYKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA8IGluZm8ucmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW0KCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAxNyA4CglidG9pCgk8CglieiAqaWY4X2VuZAoKCS8vICppZjhfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU3CgkvLyBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltIC09IGluYm94QWxnb0F2YWlsYWJsZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJZnJhbWVfZGlnIDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCS0KCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmlmOF9lbmQ6CgoqaWY3X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE2MQoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbypyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiA4CglyZXRzdWIKCi8vIGFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBheGZlcjogYXhmZXIKCXR4biBHcm91cEluZGV4CglpbnQgMQoJLQoJZHVwCglndHhucyBUeXBlRW51bQoJaW50IGF4ZmVyCgk9PQoJYXNzZXJ0CgoJLy8gZXhlY3V0ZSBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9zZW5kQXNzZXQKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4sIHJlY2VpdmVyOiBBZGRyZXNzLCBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0KTogQWRkcmVzcwovLwovLyBTZW5kIGFuIGFzc2V0IHRvIHRoZSByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIGFkZHJlc3MgdG8gc2VuZCB0aGUgYXNzZXQgdG8KLy8gQHBhcmFtIGF4ZmVyIFRoZSBhc3NldCB0cmFuc2ZlciB0byB0aGlzIGFwcAovLyBAcGFyYW0gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgVGhlIGFtb3VudCBvZiBBTEdPIHRvIHNlbmQgdG8gdGhlIHJlY2VpdmVyL2luYm94IGluIGFkZGl0aW9uIHRvIHRoZSBNQlIKLy8KLy8gQHJldHVybnMgVGhlIGFkZHJlc3MgdGhhdCB0aGUgYXNzZXQgd2FzIHNlbnQgdG8gKGVpdGhlciB0aGUgcmVjZWl2ZXIgb3IgdGhlaXIgaW5ib3gpCmFyYzU5X3NlbmRBc3NldDoKCXByb3RvIDMgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CglkdXBuIDIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzQKCS8vIHZlcmlmeUFzc2V0VHJhbnNmZXJUeG4oYXhmZXIsIHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMuYXBwLmFkZHJlc3MsCgkvLyAgICAgfSkKCS8vIHZlcmlmeSBhc3NldFJlY2VpdmVyCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0UmVjZWl2ZXIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCgk9PQoJYXNzZXJ0CgoJLy8gKmlmOV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE3OQoJLy8gcmVjZWl2ZXIuaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJYnogKmlmOV9lbmQKCgkvLyAqaWY5X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODEKCS8vIGFzc2V0UmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MgoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgzCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vICppZjEwX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg2CgkvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcyAhPT0gMAoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWludCAwCgkhPQoJYnogKmlmMTBfZW5kCgoJLy8gKmlmMTBfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IHJlY2VpdmVyLAoJLy8gICAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTg4CgkvLyByZWNlaXZlcjogcmVjZWl2ZXIKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OQoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTkzCgkvLyByZXR1cm4gcmVjZWl2ZXI7CglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWIgKmFyYzU5X3NlbmRBc3NldCpyZXR1cm4KCippZjlfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk2CgkvLyBpbmJveEV4aXN0ZWQgPSB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxOTcKCS8vIGluYm94ID0gdGhpcy5hcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyKQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWZyYW1lX2J1cnkgMSAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjExX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk5CgkvLyAhaW5ib3guaXNPcHRlZEluVG9Bc3NldChheGZlci54ZmVyQXNzZXQpCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJc3dhcAoJcG9wCgkhCglieiAqaWYxMV9lbmQKCgkvLyAqaWYxMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDAKCS8vIGluYm94TWJyRGVsdGEgPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCgkvLyAqaWYxMl9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gIWluYm94RXhpc3RlZAoJZnJhbWVfZGlnIDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgkhCglieiAqaWYxMl9lbmQKCgkvLyAqaWYxMl9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vIGluYm94TWJyRGVsdGEgKz0gZ2xvYmFscy5taW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoqaWYxMl9lbmQ6CgkvLyAqaWYxM19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNAoJLy8gaW5ib3guYmFsYW5jZSA8IGluYm94Lm1pbkJhbGFuY2UgKyBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgkrCgk8CglieiAqaWYxM19lbmQKCgkvLyAqaWYxM19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDUKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgICAgYW1vdW50OiBpbmJveE1ickRlbHRhLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNgoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gYW1vdW50OiBpbmJveE1ickRlbHRhCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTNfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEyCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldEFtb3VudDogMCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTQKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE1CgkvLyBhc3NldEFtb3VudDogMAoJaW50IDAKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTYKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjEKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50LAoJLy8gICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMgoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjMKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNAoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyNwoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTRfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjM0CgkvLyByZXR1cm4gaW5ib3g7CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoKKmFyYzU5X3NlbmRBc3NldCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCgkvLyBwb3AgYWxsIGxvY2FsIHZhcmlhYmxlcyBmcm9tIHRoZSBzdGFjawoJcG9wbiAyCglyZXRzdWIKCi8vIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW06CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW0odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW0KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2NsYWltKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW4gQVNBIGZyb20gdGhlIGluYm94Ci8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byBjbGFpbQphcmM1OV9jbGFpbToKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQzCgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKSwKCS8vICAgICAgIHhmZXJBc3NldDogYXNhLAoJLy8gICAgICAgYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ3CgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0OAoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDkKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MAoJLy8gYXNzZXRDbG9zZVRvOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgQXNzZXRDbG9zZVRvCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1MwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU0CgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTUKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTYKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKLy8gYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfcmVqZWN0OgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoJY2FsbHN1YiBhcmM1OV9yZWplY3QKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X3JlamVjdChhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIFJlamVjdCB0aGUgQVNBIGJ5IGNsb3NpbmcgaXQgb3V0IHRvIHRoZSBBU0EgY3JlYXRvci4gQWx3YXlzIHNlbmRzIHR3byBpbm5lciB0cmFuc2FjdGlvbnMuCi8vIEFsbCBub24tTUJSIEFMR08gYmFsYW5jZSBpbiB0aGUgaW5ib3ggd2lsbCBiZSBzZW50IHRvIHRoZSBjYWxsZXIuCi8vCi8vIEBwYXJhbSBhc2EgVGhlIEFTQSB0byByZWplY3QKYXJjNTlfcmVqZWN0OgoJcHJvdG8gMSAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNjcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY5CgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogYXNhLmNyZWF0b3IsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcxCgkvLyBhc3NldFJlY2VpdmVyOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjcyCgkvLyBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXBvcAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MwoJLy8geGZlckFzc2V0OiBhc2EKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc0CgkvLyBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglhc3NldF9wYXJhbXNfZ2V0IEFzc2V0Q3JlYXRvcgoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzcKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc5CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjgwCgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X2dldEluYm94OgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyByZWNlaXZlcjogYWRkcmVzcwoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJZHVwCglsZW4KCWludCAzMgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfZ2V0SW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldEluYm94Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfZ2V0SW5ib3gocmVjZWl2ZXI6IEFkZHJlc3MpOiBBZGRyZXNzCi8vCi8vIEdldCB0aGUgaW5ib3ggYWRkcmVzcyBmb3IgdGhlIGdpdmVuIHJlY2VpdmVyCi8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgcmVjZWl2ZXIgdG8gZ2V0IHRoZSBpbmJveCBmb3IKLy8KLy8gQHJldHVybnMgWmVybyBhZGRyZXNzIGlmIHRoZSByZWNlaXZlciBkb2VzIG5vdCB5ZXQgaGF2ZSBhbiBpbmJveCwgb3RoZXJ3aXNlIHRoZSBpbmJveCBhZGRyZXNzCmFyYzU5X2dldEluYm94OgoJcHJvdG8gMSAxCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjkyCgkvLyByZXR1cm4gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMgPyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlIDogZ2xvYmFscy56ZXJvQWRkcmVzczsKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglieiAqdGVybmFyeTNfZmFsc2UKCWZyYW1lX2RpZyAtMSAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2dldAoJYXNzZXJ0CgliICp0ZXJuYXJ5M19lbmQKCip0ZXJuYXJ5M19mYWxzZToKCWdsb2JhbCBaZXJvQWRkcmVzcwoKKnRlcm5hcnkzX2VuZDoKCXJldHN1YgoKLy8gYXJjNTlfY2xhaW1BbGdvKCl2b2lkCiphYmlfcm91dGVfYXJjNTlfY2xhaW1BbGdvOgoJLy8gZXhlY3V0ZSBhcmM1OV9jbGFpbUFsZ28oKXZvaWQKCWNhbGxzdWIgYXJjNTlfY2xhaW1BbGdvCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbUFsZ28oKTogdm9pZAovLwovLyBDbGFpbSBhbnkgZXh0cmEgYWxnbyBmcm9tIHRoZSBpbmJveAphcmM1OV9jbGFpbUFsZ286Cglwcm90byAwIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5NwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTkKCS8vIGFzc2VydChpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSAhPT0gMCkKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpbnQgMAoJIT0KCWFzc2VydAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMQoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAyCgkvLyBzZW5kZXI6IGluYm94CglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBTZW5kZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDMKCS8vIHJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIKCXR4biBTZW5kZXIKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDQKCS8vIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCgktCglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCXJldHN1YgoKKmNyZWF0ZV9Ob09wOgoJbWV0aG9kICJjcmVhdGVBcHBsaWNhdGlvbigpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfY3JlYXRlQXBwbGljYXRpb24KCWVycgoKKmNhbGxfTm9PcDoKCW1ldGhvZCAiYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKGFkZHJlc3MsdWludDY0KSh1aW50NjQsdWludDY0LGJvb2wsYm9vbCx1aW50NjQsdWludDY0KSIKCW1ldGhvZCAiYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9yZWplY3QodWludDY0KXZvaWQiCgltZXRob2QgImFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfY2xhaW1BbGdvKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV9hcmM1OV9vcHRSb3V0ZXJJbiAqYWJpX3JvdXRlX2FyYzU5X2dldE9yQ3JlYXRlSW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvICphYmlfcm91dGVfYXJjNTlfc2VuZEFzc2V0ICphYmlfcm91dGVfYXJjNTlfY2xhaW0gKmFiaV9yb3V0ZV9hcmM1OV9yZWplY3QgKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbwoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": { diff --git a/assets/arc-0059/contracts/clients/MutableARC59Client.ts b/assets/arc-0059/contracts/clients/MutableARC59Client.ts index 47c330ca9..1b5c54965 100644 --- a/assets/arc-0059/contracts/clients/MutableARC59Client.ts +++ b/assets/arc-0059/contracts/clients/MutableARC59Client.ts @@ -108,7 +108,7 @@ export const APP_SPEC: AppSpec = { } }, "source": { - "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjExX2VuZAoKCS8vICppZjExX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMAoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICByZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMQoJLy8gcmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwMgoJLy8gYW1vdW50OiBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kcwoJZnJhbWVfZGlnIC0zIC8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzOiB1aW50NjQKCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGF4ZmVyLnhmZXJBc3NldCkKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjEyX2VuZAoKCS8vICppZjEyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwNwoJLy8gaW5ib3hNYnJEZWx0YSA9IGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKCS8vICppZjEzX2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA4CgkvLyAhaW5ib3hFeGlzdGVkCglmcmFtZV9kaWcgMCAvLyBpbmJveEV4aXN0ZWQ6IGJvb2wKCSEKCWJ6ICppZjEzX2VuZAoKCS8vICppZjEzX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIwOAoJLy8gaW5ib3hNYnJEZWx0YSArPSBnbG9iYWxzLm1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJZ2xvYmFsIE1pbkJhbGFuY2UKCSsKCWZyYW1lX2J1cnkgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCippZjEzX2VuZDoKCS8vICppZjE0X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjExCgkvLyBpbmJveC5iYWxhbmNlIDwgaW5ib3gubWluQmFsYW5jZSArIGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0TWluQmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMiAvLyBpbmJveE1ickRlbHRhOiB1aW50NjQKCSsKCTwKCWJ6ICppZjE0X2VuZAoKCS8vICppZjE0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgICBhbW91bnQ6IGluYm94TWJyRGVsdGEsCgkvLyAgICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgcGF5CglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjEzCgkvLyByZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhbW91bnQ6IGluYm94TWJyRGVsdGEKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoqaWYxNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMTkKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMQoJLy8gYXNzZXRSZWNlaXZlcjogaW5ib3gKCWZyYW1lX2RpZyAxIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyMwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEyX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIyOAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQsCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldCwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjI5CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzMAoJLy8gYXNzZXRBbW91bnQ6IGF4ZmVyLmFzc2V0QW1vdW50CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIEFzc2V0QW1vdW50CglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjMxCgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", + "approval": "I3ByYWdtYSB2ZXJzaW9uIDEwCgovLyBUaGlzIFRFQUwgd2FzIGdlbmVyYXRlZCBieSBURUFMU2NyaXB0IHYwLjkwLjQKLy8gaHR0cHM6Ly9naXRodWIuY29tL2FsZ29yYW5kZm91bmRhdGlvbi9URUFMU2NyaXB0CgovLyBUaGlzIGNvbnRyYWN0IGlzIGNvbXBsaWFudCB3aXRoIGFuZC9vciBpbXBsZW1lbnRzIHRoZSBmb2xsb3dpbmcgQVJDczogWyBBUkM0IF0KCi8vIFRoZSBmb2xsb3dpbmcgdGVuIGxpbmVzIG9mIFRFQUwgaGFuZGxlIGluaXRpYWwgcHJvZ3JhbSBmbG93Ci8vIFRoaXMgcGF0dGVybiBpcyB1c2VkIHRvIG1ha2UgaXQgZWFzeSBmb3IgYW55b25lIHRvIHBhcnNlIHRoZSBzdGFydCBvZiB0aGUgcHJvZ3JhbSBhbmQgZGV0ZXJtaW5lIGlmIGEgc3BlY2lmaWMgYWN0aW9uIGlzIGFsbG93ZWQKLy8gSGVyZSwgYWN0aW9uIHJlZmVycyB0byB0aGUgT25Db21wbGV0ZSBpbiBjb21iaW5hdGlvbiB3aXRoIHdoZXRoZXIgdGhlIGFwcCBpcyBiZWluZyBjcmVhdGVkIG9yIGNhbGxlZAovLyBFdmVyeSBwb3NzaWJsZSBhY3Rpb24gZm9yIHRoaXMgY29udHJhY3QgaXMgcmVwcmVzZW50ZWQgaW4gdGhlIHN3aXRjaCBzdGF0ZW1lbnQKLy8gSWYgdGhlIGFjdGlvbiBpcyBub3QgaW1wbGVtZW50ZWQgaW4gdGhlIGNvbnRyYWN0LCBpdHMgcmVzcGVjdGl2ZSBicmFuY2ggd2lsbCBiZSAiKk5PVF9JTVBMRU1FTlRFRCIgd2hpY2gganVzdCBjb250YWlucyAiZXJyIgp0eG4gQXBwbGljYXRpb25JRAohCmludCA2CioKdHhuIE9uQ29tcGxldGlvbgorCnN3aXRjaCAqY2FsbF9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpjYWxsX1VwZGF0ZUFwcGxpY2F0aW9uICpOT1RfSU1QTEVNRU5URUQgKmNyZWF0ZV9Ob09wICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRCAqTk9UX0lNUExFTUVOVEVEICpOT1RfSU1QTEVNRU5URUQgKk5PVF9JTVBMRU1FTlRFRAoKKk5PVF9JTVBMRU1FTlRFRDoKCWVycgoKLy8gY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKKmFiaV9yb3V0ZV9jcmVhdGVBcHBsaWNhdGlvbjoKCS8vIGV4ZWN1dGUgY3JlYXRlQXBwbGljYXRpb24oKXZvaWQKCWNhbGxzdWIgY3JlYXRlQXBwbGljYXRpb24KCWludCAxCglyZXR1cm4KCi8vIGNyZWF0ZUFwcGxpY2F0aW9uKCk6IHZvaWQKLy8KLy8gRGVwbG95IEFSQzU5IGNvbnRyYWN0CmNyZWF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCglyZXRzdWIKCi8vIGFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkCiphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW46CgkvLyBhc2E6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQoJYnRvaQoKCS8vIGV4ZWN1dGUgYXJjNTlfb3B0Um91dGVySW4odWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfb3B0Um91dGVySW4KCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X29wdFJvdXRlckluKGFzYTogQXNzZXRJRCk6IHZvaWQKLy8KLy8gT3B0IHRoZSBBUkM1OSByb3V0ZXIgaW50byB0aGUgQVNBLiBUaGlzIGlzIHJlcXVpcmVkIGJlZm9yZSB0aGlzIGFwcCBjYW4gYmUgdXNlZCB0byBzZW5kIHRoZSBBU0EgdG8gYW55b25lLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gb3B0IGludG8KYXJjNTlfb3B0Um91dGVySW46Cglwcm90byAxIDAKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo1MAoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgYXNzZXRSZWNlaXZlcjogdGhpcy5hcHAuYWRkcmVzcywKCS8vICAgICAgIGFzc2V0QW1vdW50OiAwLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUxCgkvLyBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NTIKCS8vIGFzc2V0QW1vdW50OiAwCglpbnQgMAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjUzCgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCiphYmlfcm91dGVfYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3goYWRkcmVzcylhZGRyZXNzCgljYWxsc3ViIGFyYzU5X2dldE9yQ3JlYXRlSW5ib3gKCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRPckNyZWF0ZUluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXRzIHRoZSBleGlzdGluZyBpbmJveCBmb3IgdGhlIHJlY2VpdmVyIG9yIGNyZWF0ZXMgYSBuZXcgb25lIGlmIGl0IGRvZXMgbm90IGV4aXN0Ci8vCi8vIEBwYXJhbSByZWNlaXZlciBUaGUgYWRkcmVzcyB0byBnZXQgb3IgY3JlYXRlIHRoZSBpbmJveCBmb3IKLy8gQHJldHVybnMgVGhlIGluYm94IGFkZHJlc3MKYXJjNTlfZ2V0T3JDcmVhdGVJbmJveDoKCXByb3RvIDEgMQoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gKmlmMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY0CgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmV4aXN0cwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfbGVuCglzd2FwCglwb3AKCWJ6ICppZjBfZW5kCgoJLy8gKmlmMF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NAoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikudmFsdWU7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm4KCippZjBfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NjYKCS8vIGluYm94ID0gc2VuZE1ldGhvZENhbGw8dHlwZW9mIENvbnRyb2xsZWRBZGRyZXNzLnByb3RvdHlwZS5uZXc+KHsKCS8vICAgICAgIG9uQ29tcGxldGlvbjogT25Db21wbGV0aW9uLkRlbGV0ZUFwcGxpY2F0aW9uLAoJLy8gICAgICAgYXBwcm92YWxQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5hcHByb3ZhbFByb2dyYW0oKSwKCS8vICAgICAgIGNsZWFyU3RhdGVQcm9ncmFtOiBDb250cm9sbGVkQWRkcmVzcy5jbGVhclByb2dyYW0oKSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGFwcGwKCWl0eG5fZmllbGQgVHlwZUVudW0KCW1ldGhvZCAibmV3KClhZGRyZXNzIgoJaXR4bl9maWVsZCBBcHBsaWNhdGlvbkFyZ3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2NwoJLy8gb25Db21wbGV0aW9uOiBPbkNvbXBsZXRpb24uRGVsZXRlQXBwbGljYXRpb24KCWludCA1IC8vIERlbGV0ZUFwcGxpY2F0aW9uCglpdHhuX2ZpZWxkIE9uQ29tcGxldGlvbgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjY4CgkvLyBhcHByb3ZhbFByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmFwcHJvdmFsUHJvZ3JhbSgpCglieXRlIGI2NCBDaUFCQVRFWUZJRUdDekVaQ0kwTUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFoQUlBRUZSOThkWWdBQkZDd0lrT0tBQUd4SXJJUU1RQ3lJSUVBc2dHek1ncUpnQVJXSFMvcU5ob0FqZ0gvMHdBPQoJaXR4bl9maWVsZCBBcHByb3ZhbFByb2dyYW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo2OQoJLy8gY2xlYXJTdGF0ZVByb2dyYW06IENvbnRyb2xsZWRBZGRyZXNzLmNsZWFyUHJvZ3JhbSgpCglieXRlIGI2NCBDZz09CglpdHhuX2ZpZWxkIENsZWFyU3RhdGVQcm9ncmFtCgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJaXR4biBOdW1Mb2dzCglpbnQgMQoJLQoJaXR4bmFzIExvZ3MKCWV4dHJhY3QgNCAwCglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo3MgoJLy8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA9IGluYm94CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglib3hfcHV0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6NzQKCS8vIHJldHVybiBpbmJveDsKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCgoqYXJjNTlfZ2V0T3JDcmVhdGVJbmJveCpyZXR1cm46CgkvLyBzZXQgdGhlIHN1YnJvdXRpbmUgcmV0dXJuIHZhbHVlCglmcmFtZV9idXJ5IDAKCXJldHN1YgoKLy8gYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkKKmFiaV9yb3V0ZV9hcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJLy8gVGhlIEFCSSByZXR1cm4gcHJlZml4CglieXRlIDB4MTUxZjdjNzUKCgkvLyBhc3NldDogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAyCglidG9pCgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldFNlbmRBc3NldEluZm8oYWRkcmVzcyx1aW50NjQpKHVpbnQ2NCx1aW50NjQsYm9vbCxib29sLHVpbnQ2NCx1aW50NjQpCgljYWxsc3ViIGFyYzU5X2dldFNlbmRBc3NldEluZm8KCWNvbmNhdAoJbG9nCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9nZXRTZW5kQXNzZXRJbmZvKHJlY2VpdmVyOiBBZGRyZXNzLCBhc3NldDogQXNzZXRJRCk6IFNlbmRBc3NldEluZm8KLy8KLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBhc3NldCBUaGUgYXNzZXQgdG8gc2VuZAovLwovLyBAcmV0dXJucyBSZXR1cm5zIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gZm9yIHNlbmRpbmcgYW4gYXNzZXQ6Ci8vIFRoZSBudW1iZXIgb2YgaXR4bnMgcmVxdWlyZWQsIHRoZSBNQlIgcmVxdWlyZWQsIHdoZXRoZXIgdGhlIHJvdXRlciBpcyBvcHRlZCBpbiwgd2hldGhlciB0aGUgcmVjZWl2ZXIgaXMgb3B0ZWQgaW4sCi8vIGFuZCBob3cgbXVjaCBBTEdPIHRoZSByZWNlaXZlciB3b3VsZCBuZWVkIHRvIGNsYWltIHRoZSBhc3NldAphcmM1OV9nZXRTZW5kQXNzZXRJbmZvOgoJcHJvdG8gMiAxCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCWR1cG4gOAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjg3CgkvLyByb3V0ZXJPcHRlZEluID0gdGhpcy5hcHAuYWRkcmVzcy5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6ODgKCS8vIHJlY2VpdmVyT3B0ZWRJbiA9IHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXNzZXQpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWZyYW1lX2J1cnkgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo4OQoJLy8gaW5mbzogU2VuZEFzc2V0SW5mbyA9IHsKCS8vICAgICAgIGl0eG5zOiAxLAoJLy8gICAgICAgbWJyOiAwLAoJLy8gICAgICAgcm91dGVyT3B0ZWRJbjogcm91dGVyT3B0ZWRJbiwKCS8vICAgICAgIHJlY2VpdmVyT3B0ZWRJbjogcmVjZWl2ZXJPcHRlZEluLAoJLy8gICAgICAgcmVjZWl2ZXJBbGdvTmVlZGVkRm9yQ2xhaW06IDAsCgkvLyAgICAgICByZWNlaXZlckFsZ29OZWVkZWRGb3JXb3JzdENhc2VDbGFpbTogZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZSArIGdsb2JhbHMubWluVHhuRmVlLAoJLy8gICAgIH0KCWJ5dGUgMHgwMDAwMDAwMDAwMDAwMDAxMDAwMDAwMDAwMDAwMDAwMAoJYnl0ZSAweDAwCglpbnQgMAoJZnJhbWVfZGlnIDAgLy8gcm91dGVyT3B0ZWRJbjogYm9vbAoJc2V0Yml0CglpbnQgMQoJZnJhbWVfZGlnIDEgLy8gcmVjZWl2ZXJPcHRlZEluOiBib29sCglzZXRiaXQKCWNvbmNhdAoJYnl0ZSAweDAwMDAwMDAwMDAwMDAwMDAKCWNvbmNhdAoJZ2xvYmFsIE1pbkJhbGFuY2UKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJZ2xvYmFsIE1pblR4bkZlZQoJKwoJaXRvYgoJY29uY2F0CglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vICppZjFfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmVjZWl2ZXJPcHRlZEluCglmcmFtZV9kaWcgMSAvLyByZWNlaXZlck9wdGVkSW46IGJvb2wKCWJ6ICppZjFfZW5kCgoJLy8gKmlmMV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czo5OAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmMV9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDAKCS8vIGFsZ29OZWVkZWRUb0NsYWltID0gcmVjZWl2ZXIubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UgKyBnbG9iYWxzLm1pblR4bkZlZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglnbG9iYWwgTWluVHhuRmVlCgkrCglmcmFtZV9idXJ5IDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoKCS8vICppZjJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDMKCS8vIHJlY2VpdmVyLmJhbGFuY2UgPCBhbGdvTmVlZGVkVG9DbGFpbQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJPAoJYnogKmlmMl9lbmQKCgkvLyAqaWYyX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEwNAoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSA9IGFsZ29OZWVkZWRUb0NsYWltIC0gcmVjZWl2ZXIuYmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAxNwoJZnJhbWVfZGlnIDMgLy8gYWxnb05lZWRlZFRvQ2xhaW06IHVpbnQ2NAoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdEJhbGFuY2UKCXBvcAoJLQoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWYyX2VuZDoKCS8vICppZjNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMDgKCS8vICFyb3V0ZXJPcHRlZEluCglmcmFtZV9kaWcgMCAvLyByb3V0ZXJPcHRlZEluOiBib29sCgkhCglieiAqaWYzX2VuZAoKCS8vICppZjNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTA5CgkvLyBpbmZvLm1iciArPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDgKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDggOAoJYnRvaQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMTAKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjNfZW5kOgoJLy8gKmlmNF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExMwoJLy8gIXRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJIQoJYnogKmlmNF9lbmQKCgkvLyAqaWY0X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjExNwoJLy8gaW5mby5pdHhucyArPSA0CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyMAoJLy8gcHJlTUJSID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfYnVyeSA0IC8vIHByZU1CUjogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIxCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLnZhbHVlID0gZ2xvYmFscy56ZXJvQWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglnbG9iYWwgWmVyb0FkZHJlc3MKCWJveF9wdXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjIKCS8vIGJveE1ickRlbHRhID0gZ2xvYmFscy5jdXJyZW50QXBwbGljYXRpb25BZGRyZXNzLm1pbkJhbGFuY2UgLSBwcmVNQlIKCWdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZnJhbWVfZGlnIDQgLy8gcHJlTUJSOiB1aW50NjQKCS0KCWZyYW1lX2J1cnkgNSAvLyBib3hNYnJEZWx0YTogdWludDY0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTIzCgkvLyB0aGlzLmluYm94ZXMocmVjZWl2ZXIpLmRlbGV0ZSgpCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9kZWwKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMjYKCS8vIGluZm8ubWJyICs9IGJveE1ickRlbHRhICsgZ2xvYmFscy5taW5CYWxhbmNlICsgZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWZyYW1lX2RpZyA1IC8vIGJveE1ickRlbHRhOiB1aW50NjQKCWdsb2JhbCBNaW5CYWxhbmNlCgkrCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCSsKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEyOAoJLy8gcmV0dXJuIGluZm87CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgliICphcmM1OV9nZXRTZW5kQXNzZXRJbmZvKnJldHVybgoKKmlmNF9lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzEKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZQoJZnJhbWVfZGlnIC0xIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgNiAvLyBpbmJveDogYWRkcmVzcwoKCS8vICppZjVfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzMKCS8vICFpbmJveC5pc09wdGVkSW5Ub0Fzc2V0KGFzc2V0KQoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMiAvLyBhc3NldDogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCSEKCWJ6ICppZjVfZW5kCgoJLy8gKmlmNV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxMzUKCS8vIGluZm8uaXR4bnMgKz0gMQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCAwCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCAwIDgKCWJ0b2kKCWludCAxCgkrCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCgkvLyAqaWY2X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTM3CgkvLyAhKGluYm94LmJhbGFuY2UgPj0gaW5ib3gubWluQmFsYW5jZSArIGdsb2JhbHMuYXNzZXRPcHRJbk1pbkJhbGFuY2UpCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCgkrCgk+PQoJIQoJYnogKmlmNl9lbmQKCgkvLyAqaWY2X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjEzOQoJLy8gaW5mby5pdHhucyArPSAxCglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJaW50IDAKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDEKCSsKCWl0b2IKCXJlcGxhY2UzCglmcmFtZV9idXJ5IDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0MgoJLy8gaW5mby5tYnIgKz0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWludCA4CglmcmFtZV9kaWcgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCglzdG9yZSAyNTUgLy8gZnVsbCBhcnJheQoJbG9hZCAyNTUgLy8gZnVsbCBhcnJheQoJZXh0cmFjdCA4IDgKCWJ0b2kKCWdsb2JhbCBBc3NldE9wdEluTWluQmFsYW5jZQoJKwoJaXRvYgoJcmVwbGFjZTMKCWZyYW1lX2J1cnkgMiAvLyBpbmZvOiBTZW5kQXNzZXRJbmZvCgoqaWY2X2VuZDoKCippZjVfZW5kOgoJLy8gKmlmN19jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE0NwoJLy8gaW5ib3guYmFsYW5jZSA+IGluYm94Lm1pbkJhbGFuY2UgJiYgaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAhPT0gMAoJZnJhbWVfZGlnIDYgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCT4KCWR1cAoJYnogKnNraXBfYW5kMAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJaW50IDAKCSE9CgkmJgoKKnNraXBfYW5kMDoKCWJ6ICppZjdfZW5kCgoJLy8gKmlmN19jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTIKCS8vIGFsZ29Db25zdW1lZEJ5Q2xhaW0gPSBnbG9iYWxzLmFzc2V0T3B0SW5NaW5CYWxhbmNlICsgKGluZm8uaXR4bnMgKyA0KSAqIGdsb2JhbHMubWluVHhuRmVlCglnbG9iYWwgQXNzZXRPcHRJbk1pbkJhbGFuY2UKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDAgOAoJYnRvaQoJaW50IDQKCSsKCWdsb2JhbCBNaW5UeG5GZWUKCSoKCSsKCWZyYW1lX2J1cnkgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNTMKCS8vIGluYm94QWxnb0F2YWlsYWJsZSA9IGluYm94LmJhbGFuY2UgPiBpbmJveC5taW5CYWxhbmNlID8gaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgOiAwCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJPgoJYnogKnRlcm5hcnkxX2ZhbHNlCglmcmFtZV9kaWcgNiAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyA2IC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJYiAqdGVybmFyeTFfZW5kCgoqdGVybmFyeTFfZmFsc2U6CglpbnQgMAoKKnRlcm5hcnkxX2VuZDoKCWZyYW1lX2J1cnkgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NAoJLy8gaW5ib3hBbGdvQXZhaWxhYmxlID0gaW5ib3hBbGdvQXZhaWxhYmxlID4gYWxnb0NvbnN1bWVkQnlDbGFpbSA/IGluYm94QWxnb0F2YWlsYWJsZSAtIGFsZ29Db25zdW1lZEJ5Q2xhaW0gOiAwCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDcgLy8gYWxnb0NvbnN1bWVkQnlDbGFpbTogdWludDY0Cgk+CglieiAqdGVybmFyeTJfZmFsc2UKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CglmcmFtZV9kaWcgNyAvLyBhbGdvQ29uc3VtZWRCeUNsYWltOiB1aW50NjQKCS0KCWIgKnRlcm5hcnkyX2VuZAoKKnRlcm5hcnkyX2ZhbHNlOgoJaW50IDAKCip0ZXJuYXJ5Ml9lbmQ6CglmcmFtZV9idXJ5IDggLy8gaW5ib3hBbGdvQXZhaWxhYmxlOiB1aW50NjQKCgkvLyAqaWY4X2NvbmRpdGlvbgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTU2CgkvLyBpbmJveEFsZ29BdmFpbGFibGUgPCBpbmZvLnJlY2VpdmVyQWxnb05lZWRlZEZvckNsYWltCglmcmFtZV9kaWcgOCAvLyBpbmJveEFsZ29BdmFpbGFibGU6IHVpbnQ2NAoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoJc3RvcmUgMjU1IC8vIGZ1bGwgYXJyYXkKCWxvYWQgMjU1IC8vIGZ1bGwgYXJyYXkKCWV4dHJhY3QgMTcgOAoJYnRvaQoJPAoJYnogKmlmOF9lbmQKCgkvLyAqaWY4X2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE1NwoJLy8gaW5mby5yZWNlaXZlckFsZ29OZWVkZWRGb3JDbGFpbSAtPSBpbmJveEFsZ29BdmFpbGFibGUKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglpbnQgMTcKCWZyYW1lX2RpZyAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCXN0b3JlIDI1NSAvLyBmdWxsIGFycmF5Cglsb2FkIDI1NSAvLyBmdWxsIGFycmF5CglleHRyYWN0IDE3IDgKCWJ0b2kKCWZyYW1lX2RpZyA4IC8vIGluYm94QWxnb0F2YWlsYWJsZTogdWludDY0CgktCglpdG9iCglyZXBsYWNlMwoJZnJhbWVfYnVyeSAyIC8vIGluZm86IFNlbmRBc3NldEluZm8KCippZjhfZW5kOgoKKmlmN19lbmQ6CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNjEKCS8vIHJldHVybiBpbmZvOwoJZnJhbWVfZGlnIDIgLy8gaW5mbzogU2VuZEFzc2V0SW5mbwoKKmFyYzU5X2dldFNlbmRBc3NldEluZm8qcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gOAoJcmV0c3ViCgovLyBhcmM1OV9zZW5kQXNzZXQoYXhmZXIsYWRkcmVzcyx1aW50NjQpYWRkcmVzcwoqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgoJYnRvaQoKCS8vIHJlY2VpdmVyOiBhZGRyZXNzCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglkdXAKCWxlbgoJaW50IDMyCgk9PQoJYXNzZXJ0CgoJLy8gYXhmZXI6IGF4ZmVyCgl0eG4gR3JvdXBJbmRleAoJaW50IDEKCS0KCWR1cAoJZ3R4bnMgVHlwZUVudW0KCWludCBheGZlcgoJPT0KCWFzc2VydAoKCS8vIGV4ZWN1dGUgYXJjNTlfc2VuZEFzc2V0KGF4ZmVyLGFkZHJlc3MsdWludDY0KWFkZHJlc3MKCWNhbGxzdWIgYXJjNTlfc2VuZEFzc2V0Cgljb25jYXQKCWxvZwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfc2VuZEFzc2V0KGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuLCByZWNlaXZlcjogQWRkcmVzcywgYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NCk6IEFkZHJlc3MKLy8KLy8gU2VuZCBhbiBhc3NldCB0byB0aGUgcmVjZWl2ZXIKLy8KLy8gQHBhcmFtIHJlY2VpdmVyIFRoZSBhZGRyZXNzIHRvIHNlbmQgdGhlIGFzc2V0IHRvCi8vIEBwYXJhbSBheGZlciBUaGUgYXNzZXQgdHJhbnNmZXIgdG8gdGhpcyBhcHAKLy8gQHBhcmFtIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzIFRoZSBhbW91bnQgb2YgQUxHTyB0byBzZW5kIHRvIHRoZSByZWNlaXZlci9pbmJveCBpbiBhZGRpdGlvbiB0byB0aGUgTUJSCi8vCi8vIEByZXR1cm5zIFRoZSBhZGRyZXNzIHRoYXQgdGhlIGFzc2V0IHdhcyBzZW50IHRvIChlaXRoZXIgdGhlIHJlY2VpdmVyIG9yIHRoZWlyIGluYm94KQphcmM1OV9zZW5kQXNzZXQ6Cglwcm90byAzIDEKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoJZHVwbiAyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTc0CgkvLyB2ZXJpZnlBc3NldFRyYW5zZmVyVHhuKGF4ZmVyLCB7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLmFwcC5hZGRyZXNzLAoJLy8gICAgIH0pCgkvLyB2ZXJpZnkgYXNzZXRSZWNlaXZlcgoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldFJlY2VpdmVyCglnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwoJPT0KCWFzc2VydAoKCS8vICppZjlfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxNzkKCS8vIHJlY2VpdmVyLmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglzd2FwCglwb3AKCWJ6ICppZjlfZW5kCgoJLy8gKmlmOV9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODAKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgICAgYXNzZXRSZWNlaXZlcjogcmVjZWl2ZXIsCgkvLyAgICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgICAgeGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQsCgkvLyAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IGF4ZmVyCglpdHhuX2ZpZWxkIFR5cGVFbnVtCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTgxCgkvLyBhc3NldFJlY2VpdmVyOiByZWNlaXZlcgoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODIKCS8vIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBBc3NldEFtb3VudAoJaXR4bl9maWVsZCBBc3NldEFtb3VudAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4MwoJLy8geGZlckFzc2V0OiBheGZlci54ZmVyQXNzZXQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0CglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyAqaWYxMF9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NgoJLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMgIT09IDAKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpbnQgMAoJIT0KCWJ6ICppZjEwX2VuZAoKCS8vICppZjEwX2NvbnNlcXVlbnQKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4NwoJLy8gc2VuZFBheW1lbnQoewoJLy8gICAgICAgICAgIHJlY2VpdmVyOiByZWNlaXZlciwKCS8vICAgICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE4OAoJLy8gcmVjZWl2ZXI6IHJlY2VpdmVyCglmcmFtZV9kaWcgLTIgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoxODkKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEwX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5MwoJLy8gcmV0dXJuIHJlY2VpdmVyOwoJZnJhbWVfZGlnIC0yIC8vIHJlY2VpdmVyOiBBZGRyZXNzCgliICphcmM1OV9zZW5kQXNzZXQqcmV0dXJuCgoqaWY5X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5NgoJLy8gaW5ib3hFeGlzdGVkID0gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS5leGlzdHMKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJYm94X2xlbgoJc3dhcAoJcG9wCglmcmFtZV9idXJ5IDAgLy8gaW5ib3hFeGlzdGVkOiBib29sCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MTk3CgkvLyBpbmJveCA9IHRoaXMuYXJjNTlfZ2V0T3JDcmVhdGVJbmJveChyZWNlaXZlcikKCWZyYW1lX2RpZyAtMiAvLyByZWNlaXZlcjogQWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRPckNyZWF0ZUluYm94CglmcmFtZV9idXJ5IDEgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyAqaWYxMV9jb25kaXRpb24KCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjE5OQoJLy8gIWluYm94LmlzT3B0ZWRJblRvQXNzZXQoYXhmZXIueGZlckFzc2V0KQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgWGZlckFzc2V0Cglhc3NldF9ob2xkaW5nX2dldCBBc3NldEJhbGFuY2UKCXN3YXAKCXBvcAoJIQoJYnogKmlmMTFfZW5kCgoJLy8gKmlmMTFfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAwCgkvLyBpbmJveE1ickRlbHRhID0gZ2xvYmFscy5hc3NldE9wdEluTWluQmFsYW5jZQoJZ2xvYmFsIEFzc2V0T3B0SW5NaW5CYWxhbmNlCglmcmFtZV9idXJ5IDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CgoJLy8gKmlmMTJfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDEKCS8vICFpbmJveEV4aXN0ZWQKCWZyYW1lX2RpZyAwIC8vIGluYm94RXhpc3RlZDogYm9vbAoJIQoJYnogKmlmMTJfZW5kCgoJLy8gKmlmMTJfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjAxCgkvLyBpbmJveE1ickRlbHRhICs9IGdsb2JhbHMubWluQmFsYW5jZQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglnbG9iYWwgTWluQmFsYW5jZQoJKwoJZnJhbWVfYnVyeSAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoKKmlmMTJfZW5kOgoJLy8gKmlmMTNfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDQKCS8vIGluYm94LmJhbGFuY2UgPCBpbmJveC5taW5CYWxhbmNlICsgaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAyIC8vIGluYm94TWJyRGVsdGE6IHVpbnQ2NAoJKwoJPAoJYnogKmlmMTNfZW5kCgoJLy8gKmlmMTNfY29uc2VxdWVudAoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjA1CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICAgIGFtb3VudDogaW5ib3hNYnJEZWx0YSwKCS8vICAgICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDYKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMDcKCS8vIGFtb3VudDogaW5ib3hNYnJEZWx0YQoJZnJhbWVfZGlnIDIgLy8gaW5ib3hNYnJEZWx0YTogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjEzX2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMgoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgICAgYXNzZXRBbW91bnQ6IDAsCgkvLyAgICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBheGZlcgoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxMwoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE0CgkvLyBhc3NldFJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIxNQoJLy8gYXNzZXRBbW91bnQ6IDAKCWludCAwCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjE2CgkvLyB4ZmVyQXNzZXQ6IGF4ZmVyLnhmZXJBc3NldAoJZnJhbWVfZGlnIC0xIC8vIGF4ZmVyOiBBc3NldFRyYW5zZmVyVHhuCglndHhucyBYZmVyQXNzZXQKCWl0eG5fZmllbGQgWGZlckFzc2V0CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoKKmlmMTFfZW5kOgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIxCgkvLyBzZW5kQXNzZXRUcmFuc2Zlcih7CgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0QW1vdW50OiBheGZlci5hc3NldEFtb3VudCwKCS8vICAgICAgIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0LAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjIKCS8vIGFzc2V0UmVjZWl2ZXI6IGluYm94CglmcmFtZV9kaWcgMSAvLyBpbmJveDogYWRkcmVzcwoJaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjIzCgkvLyBhc3NldEFtb3VudDogYXhmZXIuYXNzZXRBbW91bnQKCWZyYW1lX2RpZyAtMSAvLyBheGZlcjogQXNzZXRUcmFuc2ZlclR4bgoJZ3R4bnMgQXNzZXRBbW91bnQKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjQKCS8vIHhmZXJBc3NldDogYXhmZXIueGZlckFzc2V0CglmcmFtZV9kaWcgLTEgLy8gYXhmZXI6IEFzc2V0VHJhbnNmZXJUeG4KCWd0eG5zIFhmZXJBc3NldAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gKmlmMTRfY29uZGl0aW9uCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjcKCS8vIGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzICE9PSAwCglmcmFtZV9kaWcgLTMgLy8gYWRkaXRpb25hbFJlY2VpdmVyRnVuZHM6IHVpbnQ2NAoJaW50IDAKCSE9CglieiAqaWYxNF9lbmQKCgkvLyAqaWYxNF9jb25zZXF1ZW50CgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjgKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgICAgcmVjZWl2ZXI6IGluYm94LAoJLy8gICAgICAgICBhbW91bnQ6IGFkZGl0aW9uYWxSZWNlaXZlckZ1bmRzLAoJLy8gICAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMjkKCS8vIHJlY2VpdmVyOiBpbmJveAoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgUmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyMzAKCS8vIGFtb3VudDogYWRkaXRpb25hbFJlY2VpdmVyRnVuZHMKCWZyYW1lX2RpZyAtMyAvLyBhZGRpdGlvbmFsUmVjZWl2ZXJGdW5kczogdWludDY0CglpdHhuX2ZpZWxkIEFtb3VudAoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCippZjE0X2VuZDoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjIzNAoJLy8gcmV0dXJuIGluYm94OwoJZnJhbWVfZGlnIDEgLy8gaW5ib3g6IGFkZHJlc3MKCiphcmM1OV9zZW5kQXNzZXQqcmV0dXJuOgoJLy8gc2V0IHRoZSBzdWJyb3V0aW5lIHJldHVybiB2YWx1ZQoJZnJhbWVfYnVyeSAwCgoJLy8gcG9wIGFsbCBsb2NhbCB2YXJpYWJsZXMgZnJvbSB0aGUgc3RhY2sKCXBvcG4gMgoJcmV0c3ViCgovLyBhcmM1OV9jbGFpbSh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltOgoJLy8gYXNhOiB1aW50NjQKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWJ0b2kKCgkvLyBleGVjdXRlIGFyYzU5X2NsYWltKHVpbnQ2NCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltCglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9jbGFpbShhc2E6IEFzc2V0SUQpOiB2b2lkCi8vCi8vIENsYWltIGFuIEFTQSBmcm9tIHRoZSBpbmJveAovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gY2xhaW0KYXJjNTlfY2xhaW06Cglwcm90byAxIDAKCgkvLyBQdXNoIGVtcHR5IGJ5dGVzIGFmdGVyIHRoZSBmcmFtZSBwb2ludGVyIHRvIHJlc2VydmUgc3BhY2UgZm9yIGxvY2FsIHZhcmlhYmxlcwoJYnl0ZSAweAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0MwoJLy8gaW5ib3ggPSB0aGlzLmluYm94ZXModGhpcy50eG4uc2VuZGVyKS52YWx1ZQoJdHhuIFNlbmRlcgoJYm94X2dldAoJYXNzZXJ0CglmcmFtZV9idXJ5IDAgLy8gaW5ib3g6IGFkZHJlc3MKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDUKCS8vIHNlbmRBc3NldFRyYW5zZmVyKHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICBhc3NldFJlY2VpdmVyOiB0aGlzLnR4bi5zZW5kZXIsCgkvLyAgICAgICBhc3NldEFtb3VudDogaW5ib3guYXNzZXRCYWxhbmNlKGFzYSksCgkvLyAgICAgICB4ZmVyQXNzZXQ6IGFzYSwKCS8vICAgICAgIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDYKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI0NwoJLy8gYXNzZXRSZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0UmVjZWl2ZXIKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNDgKCS8vIGFzc2V0QW1vdW50OiBpbmJveC5hc3NldEJhbGFuY2UoYXNhKQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQoJcG9wCglpdHhuX2ZpZWxkIEFzc2V0QW1vdW50CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjQ5CgkvLyB4ZmVyQXNzZXQ6IGFzYQoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJaXR4bl9maWVsZCBYZmVyQXNzZXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTAKCS8vIGFzc2V0Q2xvc2VUbzogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwoKCS8vIEZlZSBmaWVsZCBub3Qgc2V0LCBkZWZhdWx0aW5nIHRvIDAKCWludCAwCglpdHhuX2ZpZWxkIEZlZQoKCS8vIFN1Ym1pdCBpbm5lciB0cmFuc2FjdGlvbgoJaXR4bl9zdWJtaXQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNTMKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI1NAoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU1CgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjU2CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIGFyYzU5X3JlamVjdCh1aW50NjQpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X3JlamVjdDoKCS8vIGFzYTogdWludDY0Cgl0eG5hIEFwcGxpY2F0aW9uQXJncyAxCglidG9pCgoJLy8gZXhlY3V0ZSBhcmM1OV9yZWplY3QodWludDY0KXZvaWQKCWNhbGxzdWIgYXJjNTlfcmVqZWN0CglpbnQgMQoJcmV0dXJuCgovLyBhcmM1OV9yZWplY3QoYXNhOiBBc3NldElEKTogdm9pZAovLwovLyBSZWplY3QgdGhlIEFTQSBieSBjbG9zaW5nIGl0IG91dCB0byB0aGUgQVNBIGNyZWF0b3IuIEFsd2F5cyBzZW5kcyB0d28gaW5uZXIgdHJhbnNhY3Rpb25zLgovLyBBbGwgbm9uLU1CUiBBTEdPIGJhbGFuY2UgaW4gdGhlIGluYm94IHdpbGwgYmUgc2VudCB0byB0aGUgY2FsbGVyLgovLwovLyBAcGFyYW0gYXNhIFRoZSBBU0EgdG8gcmVqZWN0CmFyYzU5X3JlamVjdDoKCXByb3RvIDEgMAoKCS8vIFB1c2ggZW1wdHkgYnl0ZXMgYWZ0ZXIgdGhlIGZyYW1lIHBvaW50ZXIgdG8gcmVzZXJ2ZSBzcGFjZSBmb3IgbG9jYWwgdmFyaWFibGVzCglieXRlIDB4CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MjY3CgkvLyBpbmJveCA9IHRoaXMuaW5ib3hlcyh0aGlzLnR4bi5zZW5kZXIpLnZhbHVlCgl0eG4gU2VuZGVyCglib3hfZ2V0Cglhc3NlcnQKCWZyYW1lX2J1cnkgMCAvLyBpbmJveDogYWRkcmVzcwoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI2OQoJLy8gc2VuZEFzc2V0VHJhbnNmZXIoewoJLy8gICAgICAgc2VuZGVyOiBpbmJveCwKCS8vICAgICAgIGFzc2V0UmVjZWl2ZXI6IGFzYS5jcmVhdG9yLAoJLy8gICAgICAgYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpLAoJLy8gICAgICAgeGZlckFzc2V0OiBhc2EsCgkvLyAgICAgICBhc3NldENsb3NlVG86IGFzYS5jcmVhdG9yLAoJLy8gICAgIH0pCglpdHhuX2JlZ2luCglpbnQgYXhmZXIKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzAKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MQoJLy8gYXNzZXRSZWNlaXZlcjogYXNhLmNyZWF0b3IKCWZyYW1lX2RpZyAtMSAvLyBhc2E6IEFzc2V0SUQKCWFzc2V0X3BhcmFtc19nZXQgQXNzZXRDcmVhdG9yCglwb3AKCWl0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3MgoJLy8gYXNzZXRBbW91bnQ6IGluYm94LmFzc2V0QmFsYW5jZShhc2EpCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfaG9sZGluZ19nZXQgQXNzZXRCYWxhbmNlCglwb3AKCWl0eG5fZmllbGQgQXNzZXRBbW91bnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzMKCS8vIHhmZXJBc3NldDogYXNhCglmcmFtZV9kaWcgLTEgLy8gYXNhOiBBc3NldElECglpdHhuX2ZpZWxkIFhmZXJBc3NldAoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3NAoJLy8gYXNzZXRDbG9zZVRvOiBhc2EuY3JlYXRvcgoJZnJhbWVfZGlnIC0xIC8vIGFzYTogQXNzZXRJRAoJYXNzZXRfcGFyYW1zX2dldCBBc3NldENyZWF0b3IKCXBvcAoJaXR4bl9maWVsZCBBc3NldENsb3NlVG8KCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjc3CgkvLyBzZW5kUGF5bWVudCh7CgkvLyAgICAgICBzZW5kZXI6IGluYm94LAoJLy8gICAgICAgcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlciwKCS8vICAgICAgIGFtb3VudDogaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UsCgkvLyAgICAgfSkKCWl0eG5fYmVnaW4KCWludCBwYXkKCWl0eG5fZmllbGQgVHlwZUVudW0KCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyNzgKCS8vIHNlbmRlcjogaW5ib3gKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglpdHhuX2ZpZWxkIFNlbmRlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI3OQoJLy8gcmVjZWl2ZXI6IHRoaXMudHhuLnNlbmRlcgoJdHhuIFNlbmRlcgoJaXR4bl9maWVsZCBSZWNlaXZlcgoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI4MAoJLy8gYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZQoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWFjY3RfcGFyYW1zX2dldCBBY2N0QmFsYW5jZQoJcG9wCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RNaW5CYWxhbmNlCglwb3AKCS0KCWl0eG5fZmllbGQgQW1vdW50CgoJLy8gRmVlIGZpZWxkIG5vdCBzZXQsIGRlZmF1bHRpbmcgdG8gMAoJaW50IDAKCWl0eG5fZmllbGQgRmVlCgoJLy8gU3VibWl0IGlubmVyIHRyYW5zYWN0aW9uCglpdHhuX3N1Ym1pdAoJcmV0c3ViCgovLyBhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MKKmFiaV9yb3V0ZV9hcmM1OV9nZXRJbmJveDoKCS8vIFRoZSBBQkkgcmV0dXJuIHByZWZpeAoJYnl0ZSAweDE1MWY3Yzc1CgoJLy8gcmVjZWl2ZXI6IGFkZHJlc3MKCXR4bmEgQXBwbGljYXRpb25BcmdzIDEKCWR1cAoJbGVuCglpbnQgMzIKCT09Cglhc3NlcnQKCgkvLyBleGVjdXRlIGFyYzU5X2dldEluYm94KGFkZHJlc3MpYWRkcmVzcwoJY2FsbHN1YiBhcmM1OV9nZXRJbmJveAoJY29uY2F0Cglsb2cKCWludCAxCglyZXR1cm4KCi8vIGFyYzU5X2dldEluYm94KHJlY2VpdmVyOiBBZGRyZXNzKTogQWRkcmVzcwovLwovLyBHZXQgdGhlIGluYm94IGFkZHJlc3MgZm9yIHRoZSBnaXZlbiByZWNlaXZlcgovLwovLyBAcGFyYW0gcmVjZWl2ZXIgVGhlIHJlY2VpdmVyIHRvIGdldCB0aGUgaW5ib3ggZm9yCi8vCi8vIEByZXR1cm5zIFplcm8gYWRkcmVzcyBpZiB0aGUgcmVjZWl2ZXIgZG9lcyBub3QgeWV0IGhhdmUgYW4gaW5ib3gsIG90aGVyd2lzZSB0aGUgaW5ib3ggYWRkcmVzcwphcmM1OV9nZXRJbmJveDoKCXByb3RvIDEgMQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjI5MgoJLy8gcmV0dXJuIHRoaXMuaW5ib3hlcyhyZWNlaXZlcikuZXhpc3RzID8gdGhpcy5pbmJveGVzKHJlY2VpdmVyKS52YWx1ZSA6IGdsb2JhbHMuemVyb0FkZHJlc3M7CglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9sZW4KCXN3YXAKCXBvcAoJYnogKnRlcm5hcnkzX2ZhbHNlCglmcmFtZV9kaWcgLTEgLy8gcmVjZWl2ZXI6IEFkZHJlc3MKCWJveF9nZXQKCWFzc2VydAoJYiAqdGVybmFyeTNfZW5kCgoqdGVybmFyeTNfZmFsc2U6CglnbG9iYWwgWmVyb0FkZHJlc3MKCip0ZXJuYXJ5M19lbmQ6CglyZXRzdWIKCi8vIGFyYzU5X2NsYWltQWxnbygpdm9pZAoqYWJpX3JvdXRlX2FyYzU5X2NsYWltQWxnbzoKCS8vIGV4ZWN1dGUgYXJjNTlfY2xhaW1BbGdvKCl2b2lkCgljYWxsc3ViIGFyYzU5X2NsYWltQWxnbwoJaW50IDEKCXJldHVybgoKLy8gYXJjNTlfY2xhaW1BbGdvKCk6IHZvaWQKLy8KLy8gQ2xhaW0gYW55IGV4dHJhIGFsZ28gZnJvbSB0aGUgaW5ib3gKYXJjNTlfY2xhaW1BbGdvOgoJcHJvdG8gMCAwCgoJLy8gUHVzaCBlbXB0eSBieXRlcyBhZnRlciB0aGUgZnJhbWUgcG9pbnRlciB0byByZXNlcnZlIHNwYWNlIGZvciBsb2NhbCB2YXJpYWJsZXMKCWJ5dGUgMHgKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czoyOTcKCS8vIGluYm94ID0gdGhpcy5pbmJveGVzKHRoaXMudHhuLnNlbmRlcikudmFsdWUKCXR4biBTZW5kZXIKCWJveF9nZXQKCWFzc2VydAoJZnJhbWVfYnVyeSAwIC8vIGluYm94OiBhZGRyZXNzCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6Mjk5CgkvLyBhc3NlcnQoaW5ib3guYmFsYW5jZSAtIGluYm94Lm1pbkJhbGFuY2UgIT09IDApCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaW50IDAKCSE9Cglhc3NlcnQKCgkvLyBjb250cmFjdHMvYXJjNTkuYWxnby50czozMDEKCS8vIHNlbmRQYXltZW50KHsKCS8vICAgICAgIHNlbmRlcjogaW5ib3gsCgkvLyAgICAgICByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyLAoJLy8gICAgICAgYW1vdW50OiBpbmJveC5iYWxhbmNlIC0gaW5ib3gubWluQmFsYW5jZSwKCS8vICAgICB9KQoJaXR4bl9iZWdpbgoJaW50IHBheQoJaXR4bl9maWVsZCBUeXBlRW51bQoKCS8vIGNvbnRyYWN0cy9hcmM1OS5hbGdvLnRzOjMwMgoJLy8gc2VuZGVyOiBpbmJveAoJZnJhbWVfZGlnIDAgLy8gaW5ib3g6IGFkZHJlc3MKCWl0eG5fZmllbGQgU2VuZGVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzAzCgkvLyByZWNlaXZlcjogdGhpcy50eG4uc2VuZGVyCgl0eG4gU2VuZGVyCglpdHhuX2ZpZWxkIFJlY2VpdmVyCgoJLy8gY29udHJhY3RzL2FyYzU5LmFsZ28udHM6MzA0CgkvLyBhbW91bnQ6IGluYm94LmJhbGFuY2UgLSBpbmJveC5taW5CYWxhbmNlCglmcmFtZV9kaWcgMCAvLyBpbmJveDogYWRkcmVzcwoJYWNjdF9wYXJhbXNfZ2V0IEFjY3RCYWxhbmNlCglwb3AKCWZyYW1lX2RpZyAwIC8vIGluYm94OiBhZGRyZXNzCglhY2N0X3BhcmFtc19nZXQgQWNjdE1pbkJhbGFuY2UKCXBvcAoJLQoJaXR4bl9maWVsZCBBbW91bnQKCgkvLyBGZWUgZmllbGQgbm90IHNldCwgZGVmYXVsdGluZyB0byAwCglpbnQgMAoJaXR4bl9maWVsZCBGZWUKCgkvLyBTdWJtaXQgaW5uZXIgdHJhbnNhY3Rpb24KCWl0eG5fc3VibWl0CglyZXRzdWIKCi8vIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCiphYmlfcm91dGVfdXBkYXRlQXBwbGljYXRpb246CgkvLyBleGVjdXRlIHVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkCgljYWxsc3ViIHVwZGF0ZUFwcGxpY2F0aW9uCglpbnQgMQoJcmV0dXJuCgovLyB1cGRhdGVBcHBsaWNhdGlvbigpOiB2b2lkCnVwZGF0ZUFwcGxpY2F0aW9uOgoJcHJvdG8gMCAwCgoJLy8gY29udHJhY3RzL211dGFibGVfYXJjNTkuYWxnby50czo1CgkvLyBhc3NlcnQodGhpcy50eG4uc2VuZGVyID09PSB0aGlzLmFwcC5jcmVhdG9yKQoJdHhuIFNlbmRlcgoJdHhuYSBBcHBsaWNhdGlvbnMgMAoJYXBwX3BhcmFtc19nZXQgQXBwQ3JlYXRvcgoJcG9wCgk9PQoJYXNzZXJ0CglyZXRzdWIKCipjcmVhdGVfTm9PcDoKCW1ldGhvZCAiY3JlYXRlQXBwbGljYXRpb24oKXZvaWQiCgl0eG5hIEFwcGxpY2F0aW9uQXJncyAwCgltYXRjaCAqYWJpX3JvdXRlX2NyZWF0ZUFwcGxpY2F0aW9uCgllcnIKCipjYWxsX05vT3A6CgltZXRob2QgImFyYzU5X29wdFJvdXRlckluKHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRPckNyZWF0ZUluYm94KGFkZHJlc3MpYWRkcmVzcyIKCW1ldGhvZCAiYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyhhZGRyZXNzLHVpbnQ2NCkodWludDY0LHVpbnQ2NCxib29sLGJvb2wsdWludDY0LHVpbnQ2NCkiCgltZXRob2QgImFyYzU5X3NlbmRBc3NldChheGZlcixhZGRyZXNzLHVpbnQ2NClhZGRyZXNzIgoJbWV0aG9kICJhcmM1OV9jbGFpbSh1aW50NjQpdm9pZCIKCW1ldGhvZCAiYXJjNTlfcmVqZWN0KHVpbnQ2NCl2b2lkIgoJbWV0aG9kICJhcmM1OV9nZXRJbmJveChhZGRyZXNzKWFkZHJlc3MiCgltZXRob2QgImFyYzU5X2NsYWltQWxnbygpdm9pZCIKCXR4bmEgQXBwbGljYXRpb25BcmdzIDAKCW1hdGNoICphYmlfcm91dGVfYXJjNTlfb3B0Um91dGVySW4gKmFiaV9yb3V0ZV9hcmM1OV9nZXRPckNyZWF0ZUluYm94ICphYmlfcm91dGVfYXJjNTlfZ2V0U2VuZEFzc2V0SW5mbyAqYWJpX3JvdXRlX2FyYzU5X3NlbmRBc3NldCAqYWJpX3JvdXRlX2FyYzU5X2NsYWltICphYmlfcm91dGVfYXJjNTlfcmVqZWN0ICphYmlfcm91dGVfYXJjNTlfZ2V0SW5ib3ggKmFiaV9yb3V0ZV9hcmM1OV9jbGFpbUFsZ28KCWVycgoKKmNhbGxfVXBkYXRlQXBwbGljYXRpb246CgltZXRob2QgInVwZGF0ZUFwcGxpY2F0aW9uKCl2b2lkIgoJdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMAoJbWF0Y2ggKmFiaV9yb3V0ZV91cGRhdGVBcHBsaWNhdGlvbgoJZXJy", "clear": "I3ByYWdtYSB2ZXJzaW9uIDEw" }, "contract": {