@alpha-arcade/sdk 0.2.9 → 0.2.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import algosdk2, { AtomicTransactionComposer, getApplicationAddress, modelsv2 } from 'algosdk';
2
- import * as algokit3 from '@algorandfoundation/algokit-utils';
2
+ import * as algokit4 from '@algorandfoundation/algokit-utils';
3
3
  import { Decimal } from 'decimal.js';
4
4
 
5
5
  // src/modules/trading.ts
@@ -581,7 +581,7 @@ var MarketAppClient = class _MarketAppClient {
581
581
  constructor(appDetails, algod) {
582
582
  this.algod = algod;
583
583
  this.sender = appDetails.sender;
584
- this.appClient = algokit3.getAppClient({
584
+ this.appClient = algokit4.getAppClient({
585
585
  ...appDetails,
586
586
  app: APP_SPEC
587
587
  }, algod);
@@ -979,7 +979,7 @@ var MarketAppClient = class _MarketAppClient {
979
979
  return this;
980
980
  },
981
981
  addTransaction(txn, defaultSender) {
982
- promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit3.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
982
+ promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit4.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
983
983
  return this;
984
984
  },
985
985
  async atc() {
@@ -996,7 +996,7 @@ var MarketAppClient = class _MarketAppClient {
996
996
  },
997
997
  async execute(sendParams) {
998
998
  await promiseChain;
999
- const result = await algokit3.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
999
+ const result = await algokit4.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
1000
1000
  return {
1001
1001
  ...result,
1002
1002
  returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
@@ -1140,7 +1140,7 @@ var MatcherAppClient = class {
1140
1140
  constructor(appDetails, algod) {
1141
1141
  this.algod = algod;
1142
1142
  this.sender = appDetails.sender;
1143
- this.appClient = algokit3.getAppClient({
1143
+ this.appClient = algokit4.getAppClient({
1144
1144
  ...appDetails,
1145
1145
  app: APP_SPEC2
1146
1146
  }, algod);
@@ -1242,7 +1242,7 @@ var MatcherAppClient = class {
1242
1242
  return this;
1243
1243
  },
1244
1244
  addTransaction(txn, defaultSender) {
1245
- promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit3.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
1245
+ promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit4.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
1246
1246
  return this;
1247
1247
  },
1248
1248
  async atc() {
@@ -1259,7 +1259,693 @@ var MatcherAppClient = class {
1259
1259
  },
1260
1260
  async execute(sendParams) {
1261
1261
  await promiseChain;
1262
- const result = await algokit3.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
1262
+ const result = await algokit4.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
1263
+ return {
1264
+ ...result,
1265
+ returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1266
+ };
1267
+ }
1268
+ };
1269
+ }
1270
+ };
1271
+ var APP_SPEC3 = {
1272
+ "hints": {
1273
+ "on_create()uint8": {
1274
+ "call_config": {
1275
+ "no_op": "CREATE"
1276
+ }
1277
+ },
1278
+ "setup(string,string,string,string,string)uint8": {
1279
+ "call_config": {
1280
+ "no_op": "CALL"
1281
+ }
1282
+ },
1283
+ "match_maker(application,uint64)uint8": {
1284
+ "call_config": {
1285
+ "no_op": "CALL"
1286
+ }
1287
+ },
1288
+ "amend_order(uint64,uint64,uint64)uint8": {
1289
+ "call_config": {
1290
+ "no_op": "CALL"
1291
+ }
1292
+ },
1293
+ "match_taker(application)uint64": {
1294
+ "call_config": {
1295
+ "no_op": "CALL"
1296
+ }
1297
+ },
1298
+ "delete()uint8": {
1299
+ "call_config": {
1300
+ "delete_application": "CALL"
1301
+ }
1302
+ },
1303
+ "on_update()uint64": {
1304
+ "call_config": {
1305
+ "update_application": "CALL"
1306
+ }
1307
+ }
1308
+ },
1309
+ "source": {
1310
+ "approval": "I3ByYWdtYSB2ZXJzaW9uIDgKaW50Y2Jsb2NrIDAgMSAxMDAwMDAwIDQgMjU2IDEwMDAwMDAwMDAwMDAwMDAwMDAKYnl0ZWNibG9jayAweDZkNjE3MjZiNjU3NDVmNjE3MDcwNWY2OTY0IDB4NzA2ZjczNjk3NDY5NmY2ZSAweDcwNzI2OTYzNjUgMHg3MzY5NjQ2NSAweDczNmM2OTcwNzA2MTY3NjUgMHg2Zjc3NmU2NTcyIDB4NzE3NTYxNmU3NDY5NzQ3OSAweDY2NjU2NTVmNzQ2OTZkNjU3MjVmNzM3NDYxNzI3NCAweDcxNzU2MTZlNzQ2OTc0Nzk1ZjY2Njk2YzZjNjU2NCAweDYzNmY2YzZjNjE3NDY1NzI2MTZjNWY2MTczNzM2NTc0NWY2OTY0IDB4MTUxZjdjNzUgMHg3OTY1NzM1ZjYxNzM3MzY1NzQ1ZjY5NjQgMHg2ZTZmNWY2MTczNzM2NTc0NWY2OTY0IDB4NjY2NTY1NWY2MjYxNzM2NTVmNzA2NTcyNjM2NTZlNzQgMHgwMCAweDYxNzM3MzY1NzQ1ZjZjNjk3Mzc0NjU2NCAweDY2NjU2NTVmNjE2NDY0NzI2NTczNzMgMHg5NTRlN2Q3MiAweDMyY2UyODFlIDB4YzkxZTg4ZjUgMHhkYjkyMmZjMiAweCAweGJhMWRlZWY1CnR4biBOdW1BcHBBcmdzCmludGNfMCAvLyAwCj09CmJueiBtYWluX2wxNgp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCnB1c2hieXRlcyAweDQzZGI2MmExIC8vICJvbl9jcmVhdGUoKXVpbnQ4Igo9PQpibnogbWFpbl9sMTUKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAxNyAvLyAic2V0dXAoc3RyaW5nLHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZyl1aW50OCIKPT0KYm56IG1haW5fbDE0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMTggLy8gIm1hdGNoX21ha2VyKGFwcGxpY2F0aW9uLHVpbnQ2NCl1aW50OCIKPT0KYm56IG1haW5fbDEzCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMTkgLy8gImFtZW5kX29yZGVyKHVpbnQ2NCx1aW50NjQsdWludDY0KXVpbnQ4Igo9PQpibnogbWFpbl9sMTIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAyMCAvLyAibWF0Y2hfdGFrZXIoYXBwbGljYXRpb24pdWludDY0Igo9PQpibnogbWFpbl9sMTEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMApwdXNoYnl0ZXMgMHgxMTllM2M0YiAvLyAiZGVsZXRlKCl1aW50OCIKPT0KYm56IG1haW5fbDEwCnR4bmEgQXBwbGljYXRpb25BcmdzIDAKcHVzaGJ5dGVzIDB4MjRjM2QyMzQgLy8gIm9uX3VwZGF0ZSgpdWludDY0Igo9PQpibnogbWFpbl9sOQplcnIKbWFpbl9sOToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzMgLy8gVXBkYXRlQXBwbGljYXRpb24KPT0KdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKIT0KJiYKYXNzZXJ0CmNhbGxzdWIgb251cGRhdGVjYXN0ZXJfMzMKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEwOgp0eG4gT25Db21wbGV0aW9uCnB1c2hpbnQgNSAvLyBEZWxldGVBcHBsaWNhdGlvbgo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAohPQomJgphc3NlcnQKY2FsbHN1YiBkZWxldGVjYXN0ZXJfMzIKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDExOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG1hdGNodGFrZXJjYXN0ZXJfMzEKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEyOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIGFtZW5kb3JkZXJjYXN0ZXJfMzAKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDEzOgp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIG1hdGNobWFrZXJjYXN0ZXJfMjkKaW50Y18xIC8vIDEKcmV0dXJuCm1haW5fbDE0Ogp0eG4gT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CnR4biBBcHBsaWNhdGlvbklECmludGNfMCAvLyAwCiE9CiYmCmFzc2VydApjYWxsc3ViIHNldHVwY2FzdGVyXzI4CmludGNfMSAvLyAxCnJldHVybgptYWluX2wxNToKdHhuIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQp0eG4gQXBwbGljYXRpb25JRAppbnRjXzAgLy8gMAo9PQomJgphc3NlcnQKY2FsbHN1YiBvbmNyZWF0ZWNhc3Rlcl8yNwppbnRjXzEgLy8gMQpyZXR1cm4KbWFpbl9sMTY6CnR4biBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KYm56IG1haW5fbDE4CmVycgptYWluX2wxODoKdHhuIEFwcGxpY2F0aW9uSUQKaW50Y18wIC8vIDAKPT0KYXNzZXJ0CmNhbGxzdWIgY3JlYXRlXzgKaW50Y18xIC8vIDEKcmV0dXJuCgovLyBkaXZfcm91bmQKZGl2cm91bmRfMDoKcHJvdG8gMiAxCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKLwpzdG9yZSA5CmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKJQpwdXNoaW50IDUwMCAvLyA1MDAKPgpibnogZGl2cm91bmRfMF9sMgpsb2FkIDkKcmV0c3ViCmRpdnJvdW5kXzBfbDI6CmxvYWQgOQppbnRjXzEgLy8gMQorCnJldHN1YgoKLy8gZGl2X2NlaWxfYnl0ZXMKZGl2Y2VpbGJ5dGVzXzE6CnByb3RvIDIgMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC0xCmIvCnN0b3JlIDE3CmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTEKYiUKbGVuCmludGNfMCAvLyAwCj4KYm56IGRpdmNlaWxieXRlc18xX2wyCmxvYWQgMTcKcmV0c3ViCmRpdmNlaWxieXRlc18xX2wyOgpsb2FkIDE3CmludGNfMSAvLyAxCml0b2IKYisKcmV0c3ViCgovLyBjYWxjdWxhdGVfZmVlCmNhbGN1bGF0ZWZlZV8yOgpwcm90byAzIDEKZnJhbWVfZGlnIC0zCml0b2IKc3RvcmUgMgpmcmFtZV9kaWcgLTIKaXRvYgpzdG9yZSAzCmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgotCml0b2IKc3RvcmUgNApsb2FkIDIKbG9hZCAzCmIqCnN0b3JlIDIKbG9hZCAyCmxvYWQgNApiKgpzdG9yZSAyCmxvYWQgMgpmcmFtZV9kaWcgLTEKaXRvYgpiKgpzdG9yZSAyCmxvYWQgMgppbnRjIDUgLy8gMTAwMDAwMDAwMDAwMDAwMDAwMAppdG9iCmIvCmJ0b2kKcmV0c3ViCgovLyBjYWxjdWxhdGVfZmVlX2NvbW1pdApjYWxjdWxhdGVmZWVjb21taXRfMzoKcHJvdG8gMyAxCmZyYW1lX2RpZyAtMwppdG9iCnN0b3JlIDE0CmZyYW1lX2RpZyAtMgppdG9iCnN0b3JlIDE1CmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgotCml0b2IKc3RvcmUgMTYKbG9hZCAxNApsb2FkIDE1CmIqCnN0b3JlIDE0CmxvYWQgMTQKbG9hZCAxNgpiKgpzdG9yZSAxNApsb2FkIDE0CmZyYW1lX2RpZyAtMQppdG9iCmIqCnN0b3JlIDE0CmxvYWQgMTQKaW50YyA1IC8vIDEwMDAwMDAwMDAwMDAwMDAwMDAKaXRvYgpjYWxsc3ViIGRpdmNlaWxieXRlc18xCmJ0b2kKcmV0c3ViCgovLyBnbG9iYWxfbXVzdF9nZXQKZ2xvYmFsbXVzdGdldF80Ogpwcm90byAyIDEKZnJhbWVfZGlnIC0yCmZyYW1lX2RpZyAtMQphcHBfZ2xvYmFsX2dldF9leApzdG9yZSAxCnN0b3JlIDAKbG9hZCAxCmFzc2VydApsb2FkIDAKcmV0c3ViCgovLyBnZXRfYXBwX2FkZHIKZ2V0YXBwYWRkcl81Ogpwcm90byAxIDEKZnJhbWVfZGlnIC0xCmFwcF9wYXJhbXNfZ2V0IEFwcEFkZHJlc3MKc3RvcmUgNgpzdG9yZSA1CmxvYWQgNgphc3NlcnQKbG9hZCA1CnJldHN1YgoKLy8gc2VuZF9hc3NldApzZW5kYXNzZXRfNjoKcHJvdG8gNCAwCml0eG5fYmVnaW4KaW50Y18zIC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KZnJhbWVfZGlnIC00Cml0eG5fZmllbGQgU2VuZGVyCmZyYW1lX2RpZyAtMwppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmZyYW1lX2RpZyAtMgppdHhuX2ZpZWxkIFhmZXJBc3NldApmcmFtZV9kaWcgLTEKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCml0eG5fc3VibWl0CnJldHN1YgoKLy8gZ2V0X2Z1bmRzX3RvX3RyYWRlcgpnZXRmdW5kc3RvdHJhZGVyXzc6CnByb3RvIDQgMApmcmFtZV9kaWcgLTQKZnJhbWVfZGlnIC0yCmFzc2V0X2hvbGRpbmdfZ2V0IEFzc2V0QmFsYW5jZQpzdG9yZSA4CnN0b3JlIDcKbG9hZCA4CmJueiBnZXRmdW5kc3RvdHJhZGVyXzdfbDIKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTMKY2FsbHN1YiBzZW5kYXNzZXRfNgpiIGdldGZ1bmRzdG90cmFkZXJfN19sMwpnZXRmdW5kc3RvdHJhZGVyXzdfbDI6Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKZnJhbWVfZGlnIC00CmNhbGxzdWIgc2VuZGFzc2V0XzYKZ2V0ZnVuZHN0b3RyYWRlcl83X2wzOgpyZXRzdWIKCi8vIGNyZWF0ZQpjcmVhdGVfODoKcHJvdG8gMCAwCmJ5dGVjIDE1IC8vICJhc3NldF9saXN0ZWQiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNSAvLyAib3duZXIiCmJ5dGVjIDIxIC8vICIiCmFwcF9nbG9iYWxfcHV0CmJ5dGVjXzEgLy8gInBvc2l0aW9uIgppbnRjXzAgLy8gMAphcHBfZ2xvYmFsX3B1dApieXRlY18yIC8vICJwcmljZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInF1YW50aXR5X2ZpbGxlZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAic2lkZSIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmludGNfMCAvLyAwCmFwcF9nbG9iYWxfcHV0CnJldHN1YgoKLy8gb25fY3JlYXRlCm9uY3JlYXRlXzk6CnByb3RvIDAgMQppbnRjXzAgLy8gMAppbnRjXzEgLy8gMQpmcmFtZV9idXJ5IDAKZnJhbWVfZGlnIDAKaW50YyA0IC8vIDI1Ngo8CmFzc2VydApyZXRzdWIKCi8vIHNldHVwCnNldHVwXzEwOgpwcm90byA1IDEKaW50Y18wIC8vIDAKdHhuIFNlbmRlcgpnbG9iYWwgQ3JlYXRvckFkZHJlc3MKPT0KLy8gdW5hdXRob3JpemVkCmFzc2VydAp0eG4gVHlwZUVudW0KcHVzaGludCA2IC8vIGFwcGwKPT0KYXNzZXJ0CnR4bmEgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMTcgLy8gInNldHVwKHN0cmluZyxzdHJpbmcsc3RyaW5nLHN0cmluZyxzdHJpbmcpdWludDgiCj09CmFzc2VydApmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYnRvaQppbnRjXzAgLy8gMAo9PQpmcmFtZV9kaWcgLTUKZXh0cmFjdCAyIDAKYnRvaQppbnRjXzEgLy8gMQo9PQp8fAphc3NlcnQKZnJhbWVfZGlnIC0zCmV4dHJhY3QgMiAwCmJ0b2kKaW50Y18wIC8vIDAKPT0KZnJhbWVfZGlnIC0zCmV4dHJhY3QgMiAwCmJ0b2kKaW50Y18xIC8vIDEKPT0KfHwKYXNzZXJ0CmZyYW1lX2RpZyAtNApleHRyYWN0IDIgMApidG9pCmludGNfMCAvLyAwCj4KYXNzZXJ0CmZyYW1lX2RpZyAtNApleHRyYWN0IDIgMApidG9pCmludGNfMiAvLyAxMDAwMDAwCjwKYXNzZXJ0CmZyYW1lX2RpZyAtMgpleHRyYWN0IDIgMApidG9pCmludGNfMCAvLyAwCj4KYXNzZXJ0CmJ5dGVjIDE1IC8vICJhc3NldF9saXN0ZWQiCmludGNfMCAvLyAwCnR4bmFzIEFzc2V0cwphcHBfZ2xvYmFsX3B1dApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgpnbG9iYWwgQ2FsbGVyQXBwbGljYXRpb25JRAphcHBfZ2xvYmFsX3B1dApieXRlY18xIC8vICJwb3NpdGlvbiIKZnJhbWVfZGlnIC01CmV4dHJhY3QgMiAwCmJ0b2kKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMyAvLyAic2lkZSIKZnJhbWVfZGlnIC0zCmV4dHJhY3QgMiAwCmJ0b2kKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmZyYW1lX2RpZyAtMgpleHRyYWN0IDIgMApidG9pCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDggLy8gInF1YW50aXR5X2ZpbGxlZCIKaW50Y18wIC8vIDAKYXBwX2dsb2JhbF9wdXQKYnl0ZWNfMiAvLyAicHJpY2UiCmZyYW1lX2RpZyAtNApleHRyYWN0IDIgMApidG9pCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDUgLy8gIm93bmVyIgppbnRjXzEgLy8gMQp0eG5hcyBBY2NvdW50cwphcHBfZ2xvYmFsX3B1dApieXRlYyA0IC8vICJzbGlwcGFnZSIKZnJhbWVfZGlnIC0xCmV4dHJhY3QgMiAwCmJ0b2kKYXBwX2dsb2JhbF9wdXQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKaW50Y18wIC8vIDAKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzZW5kYXNzZXRfNgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwppbnRjXzAgLy8gMApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMSAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpjYWxsc3ViIHNlbmRhc3NldF82Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmludGNfMCAvLyAwCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEyIC8vICJub19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKY2FsbHN1YiBzZW5kYXNzZXRfNgpieXRlYyA3IC8vICJmZWVfdGltZXJfc3RhcnQiCmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKYXBwX2dsb2JhbF9wdXQKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCmZyYW1lX2RpZyAwCmludGMgNCAvLyAyNTYKPAphc3NlcnQKcmV0c3ViCgovLyB2YWxpZGF0ZV9tYXRjaF9ncm91cAp2YWxpZGF0ZW1hdGNoZ3JvdXBfMTE6CnByb3RvIDEgMAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQorCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQorCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAyMCAvLyAibWF0Y2hfdGFrZXIoYXBwbGljYXRpb24pdWludDY0Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnMgVHlwZUVudW0KcHVzaGludCA2IC8vIGFwcGwKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAwCmJ5dGVjIDIyIC8vICJwcm9jZXNzX3BvdGVudGlhbF9tYXRjaChhcHBsaWNhdGlvbixhcHBsaWNhdGlvbil1aW50OCIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnMgQXBwbGljYXRpb25JRApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBPbkNvbXBsZXRpb24KaW50Y18wIC8vIE5vT3AKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CnB1c2hpbnQgMiAvLyAyCisKZ3R4bnMgT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CmFzc2VydApyZXRzdWIKCi8vIGhhbmRsZV9mZWVfdHJhbnNmZXIKaGFuZGxlZmVldHJhbnNmZXJfMTI6CnByb3RvIDUgMApmcmFtZV9kaWcgLTUKZnJhbWVfZGlnIC00CmZyYW1lX2RpZyAtMwpmcmFtZV9kaWcgLTIKY2FsbHN1YiBjYWxjdWxhdGVmZWVfMgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyA5IC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTEKY2FsbHN1YiBzZW5kYXNzZXRfNgpyZXRzdWIKCi8vIGhhbmRsZV9iaWRfYXNrX21ha2VyX2JpZApoYW5kbGViaWRhc2ttYWtlcmJpZF8xMzoKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmZyYW1lX2RpZyAtMgpieXRlYyA0IC8vICJzbGlwcGFnZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQo+PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZnJhbWVfZGlnIC0xCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldAoqCmludGNfMiAvLyAxMDAwMDAwCi8KZnJhbWVfZGlnIC0xCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMyAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBjYWxjdWxhdGVmZWVfMgotCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl83Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpieXRlY18yIC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTMgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDE2IC8vICJmZWVfYWRkcmVzcyIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBoYW5kbGVmZWV0cmFuc2Zlcl8xMgpyZXRzdWIKCi8vIGhhbmRsZV9iaWRfYXNrX21ha2VyX2FzawpoYW5kbGViaWRhc2ttYWtlcmFza18xNDoKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmZyYW1lX2RpZyAtMgpieXRlYyA0IC8vICJzbGlwcGFnZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKKwo8PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJueiBoYW5kbGViaWRhc2ttYWtlcmFza18xNF9sMgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMSAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApiIGhhbmRsZWJpZGFza21ha2VyYXNrXzE0X2wzCmhhbmRsZWJpZGFza21ha2VyYXNrXzE0X2wyOgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMiAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmhhbmRsZWJpZGFza21ha2VyYXNrXzE0X2wzOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzcKcmV0c3ViCgovLyBoYW5kbGVfbWFrZXJfYmlkX2JpZF9jb21wbGVtZW50CmhhbmRsZW1ha2VyYmlkYmlkY29tcGxlbWVudF8xNToKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CisKZnJhbWVfZGlnIC0yCmJ5dGVjIDQgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAorCmludGNfMiAvLyAxMDAwMDAwCj49CmFzc2VydApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpmcmFtZV9kaWcgLTEKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CioKaW50Y18yIC8vIDEwMDAwMDAKY2FsbHN1YiBkaXZyb3VuZF8wCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgZ2V0YXBwYWRkcl81CmNhbGxzdWIgc2VuZGFzc2V0XzYKcmV0c3ViCgovLyBoYW5kbGVfbWFrZXJfYXNrX2Fza19jb21wbGVtZW50CmhhbmRsZW1ha2VyYXNrYXNrY29tcGxlbWVudF8xNjoKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmZyYW1lX2RpZyAtMgpieXRlYyA0IC8vICJzbGlwcGFnZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQorCmludGNfMiAvLyAxMDAwMDAwCjw9CmFzc2VydApnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpmcmFtZV9kaWcgLTEKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJueiBoYW5kbGVtYWtlcmFza2Fza2NvbXBsZW1lbnRfMTZfbDIKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTEgLy8gInllc19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKYiBoYW5kbGVtYWtlcmFza2Fza2NvbXBsZW1lbnRfMTZfbDMKaGFuZGxlbWFrZXJhc2thc2tjb21wbGVtZW50XzE2X2wyOgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMiAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmhhbmRsZW1ha2VyYXNrYXNrY29tcGxlbWVudF8xNl9sMzoKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKY2FsbHN1YiBnZXRhcHBhZGRyXzUKY2FsbHN1YiBzZW5kYXNzZXRfNgpyZXRzdWIKCi8vIG1hdGNoX21ha2VyCm1hdGNobWFrZXJfMTc6CnByb3RvIDIgMQppbnRjXzAgLy8gMApmcmFtZV9kaWcgLTIKY2FsbHN1YiB2YWxpZGF0ZW1hdGNoZ3JvdXBfMTEKZnJhbWVfZGlnIC0xCmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldApieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0Ci0KPD0KYXNzZXJ0CmJ5dGVjIDQgLy8gInNsaXBwYWdlIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo+CmJueiBtYXRjaG1ha2VyXzE3X2wxMQptYXRjaG1ha2VyXzE3X2wxOgpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpibnogbWF0Y2htYWtlcl8xN19sMTAKbWF0Y2htYWtlcl8xN19sMjoKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYm56IG1hdGNobWFrZXJfMTdfbDkKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNobWFrZXJfMTdfbDgKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNobWFrZXJfMTdfbDcKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYnogbWF0Y2htYWtlcl8xN19sMTIKZnJhbWVfZGlnIC0yCnR4bmFzIEFwcGxpY2F0aW9ucwpmcmFtZV9kaWcgLTEKY2FsbHN1YiBoYW5kbGVtYWtlcmFza2Fza2NvbXBsZW1lbnRfMTYKYiBtYXRjaG1ha2VyXzE3X2wxMgptYXRjaG1ha2VyXzE3X2w3OgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQpjYWxsc3ViIGhhbmRsZW1ha2VyYmlkYmlkY29tcGxlbWVudF8xNQpiIG1hdGNobWFrZXJfMTdfbDEyCm1hdGNobWFrZXJfMTdfbDg6CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKZnJhbWVfZGlnIC0xCmNhbGxzdWIgaGFuZGxlYmlkYXNrbWFrZXJhc2tfMTQKYiBtYXRjaG1ha2VyXzE3X2wxMgptYXRjaG1ha2VyXzE3X2w5OgpmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmZyYW1lX2RpZyAtMQpjYWxsc3ViIGhhbmRsZWJpZGFza21ha2VyYmlkXzEzCmIgbWF0Y2htYWtlcl8xN19sMTIKbWF0Y2htYWtlcl8xN19sMTA6Cmdsb2JhbCBMYXRlc3RUaW1lc3RhbXAKYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgphcHBfZ2xvYmFsX2dldApwdXNoaW50IDEyMCAvLyAxMjAKKwo8CmFzc2VydApiIG1hdGNobWFrZXJfMTdfbDIKbWF0Y2htYWtlcl8xN19sMTE6CmZyYW1lX2RpZyAtMgp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj4KYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKPD0KJiYKYXNzZXJ0CmIgbWF0Y2htYWtlcl8xN19sMQptYXRjaG1ha2VyXzE3X2wxMjoKYnl0ZWMgOCAvLyAicXVhbnRpdHlfZmlsbGVkIgpieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMQorCmFwcF9nbG9iYWxfcHV0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjIDQgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gdmFsaWRhdGVfdGFrZXJfbWF0Y2hfZ3JvdXAKdmFsaWRhdGV0YWtlcm1hdGNoZ3JvdXBfMTg6CnByb3RvIDEgMAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMApieXRlYyAxOCAvLyAibWF0Y2hfbWFrZXIoYXBwbGljYXRpb24sdWludDY0KXVpbnQ4Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBBcHBsaWNhdGlvbklECmZyYW1lX2RpZyAtMQo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBUeXBlRW51bQpwdXNoaW50IDYgLy8gYXBwbAo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhuc2EgQXBwbGljYXRpb25BcmdzIDAKYnl0ZWMgMjIgLy8gInByb2Nlc3NfcG90ZW50aWFsX21hdGNoKGFwcGxpY2F0aW9uLGFwcGxpY2F0aW9uKXVpbnQ4Igo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKKwpndHhucyBBcHBsaWNhdGlvbklECmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldApieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0Ci0KPD0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgT25Db21wbGV0aW9uCmludGNfMCAvLyBOb09wCj09CmFzc2VydAp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQorCmd0eG5zIE9uQ29tcGxldGlvbgppbnRjXzAgLy8gTm9PcAo9PQphc3NlcnQKcmV0c3ViCgovLyBoYW5kbGVfdGFrZXJfYmlkX2Fza19iaWQKaGFuZGxldGFrZXJiaWRhc2tiaWRfMTk6CnByb3RvIDIgMApieXRlY18yIC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmFwcF9nbG9iYWxfZ2V0CisKZnJhbWVfZGlnIC0yCmJ5dGVjXzIgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAo+PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKZnJhbWVfZGlnIC0xCmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKKgppbnRjXzIgLy8gMTAwMDAwMAovCmNhbGxzdWIgZ2V0ZnVuZHN0b3RyYWRlcl83Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEzIC8vICJmZWVfYmFzZV9wZXJjZW50IgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxNiAvLyAiZmVlX2FkZHJlc3MiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmNhbGxzdWIgaGFuZGxlZmVldHJhbnNmZXJfMTIKcmV0c3ViCgovLyBoYW5kbGVfdGFrZXJfYmlkX2Fza19hc2sKaGFuZGxldGFrZXJiaWRhc2thc2tfMjA6CnByb3RvIDIgMApieXRlY18yIC8vICJwcmljZSIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmFwcF9nbG9iYWxfZ2V0Ci0KZnJhbWVfZGlnIC0yCmJ5dGVjXzIgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAo8PQphc3NlcnQKZnJhbWVfZGlnIC0yCmJ5dGVjIDUgLy8gIm93bmVyIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApmcmFtZV9kaWcgLTIKY2FsbHN1YiBnZXRhcHBhZGRyXzUKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJueiBoYW5kbGV0YWtlcmJpZGFza2Fza18yMF9sMgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMSAvLyAieWVzX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApiIGhhbmRsZXRha2VyYmlkYXNrYXNrXzIwX2wzCmhhbmRsZXRha2VyYmlkYXNrYXNrXzIwX2wyOgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMiAvLyAibm9fYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmhhbmRsZXRha2VyYmlkYXNrYXNrXzIwX2wzOgpmcmFtZV9kaWcgLTEKY2FsbHN1YiBnZXRmdW5kc3RvdHJhZGVyXzcKcmV0c3ViCgovLyBoYW5kbGVfdGFrZXJfYmlkX2JpZF9jb21wbGVtZW50CmhhbmRsZXRha2VyYmlkYmlkY29tcGxlbWVudF8yMToKcHJvdG8gMiAwCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CisKYnl0ZWMgNCAvLyAic2xpcHBhZ2UiCmFwcF9nbG9iYWxfZ2V0CisKaW50Y18yIC8vIDEwMDAwMDAKPj0KYXNzZXJ0CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwppbnRjXzIgLy8gMTAwMDAwMApmcmFtZV9kaWcgLTIKYnl0ZWNfMiAvLyAicHJpY2UiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80Ci0KPgpibnogaGFuZGxldGFrZXJiaWRiaWRjb21wbGVtZW50XzIxX2wyCmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwpzdG9yZSAxOApiIGhhbmRsZXRha2VyYmlkYmlkY29tcGxlbWVudF8yMV9sMwpoYW5kbGV0YWtlcmJpZGJpZGNvbXBsZW1lbnRfMjFfbDI6CmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQpzdG9yZSAxOApoYW5kbGV0YWtlcmJpZGJpZGNvbXBsZW1lbnRfMjFfbDM6Cmdsb2JhbCBDdXJyZW50QXBwbGljYXRpb25BZGRyZXNzCmZyYW1lX2RpZyAtMQpsb2FkIDE4CioKaW50Y18yIC8vIDEwMDAwMDAKY2FsbHN1YiBkaXZyb3VuZF8wCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgZ2V0YXBwYWRkcl81CmNhbGxzdWIgc2VuZGFzc2V0XzYKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmxvYWQgMTgKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTMgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDE2IC8vICJmZWVfYWRkcmVzcyIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBoYW5kbGVmZWV0cmFuc2Zlcl8xMgpyZXRzdWIKCi8vIGhhbmRsZV90YWtlcl9hc2tfYXNrX2NvbXBsZW1lbnQKaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyOgpwcm90byAyIDAKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKKwpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKLQppbnRjXzIgLy8gMTAwMDAwMAo8PQphc3NlcnQKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDQgLy8gInNsaXBwYWdlIgphcHBfZ2xvYmFsX2dldAotCmludGNfMiAvLyAxMDAwMDAwCmZyYW1lX2RpZyAtMgpieXRlY18yIC8vICJwcmljZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKLQo8CmJueiBoYW5kbGV0YWtlcmFza2Fza2NvbXBsZW1lbnRfMjJfbDUKaW50Y18yIC8vIDEwMDAwMDAKZnJhbWVfZGlnIC0yCmJ5dGVjXzIgLy8gInByaWNlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAotCnN0b3JlIDE5CmhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sMjoKZ2xvYmFsIEN1cnJlbnRBcHBsaWNhdGlvbkFkZHJlc3MKZnJhbWVfZGlnIC0xCmJ5dGVjXzEgLy8gInBvc2l0aW9uIgphcHBfZ2xvYmFsX2dldAppbnRjXzAgLy8gMAo9PQpibnogaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyX2w0CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDExIC8vICJ5ZXNfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmIgaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyX2w2CmhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sNDoKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTIgLy8gIm5vX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNApiIGhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sNgpoYW5kbGV0YWtlcmFza2Fza2NvbXBsZW1lbnRfMjJfbDU6CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKLQpzdG9yZSAxOQpiIGhhbmRsZXRha2VyYXNrYXNrY29tcGxlbWVudF8yMl9sMgpoYW5kbGV0YWtlcmFza2Fza2NvbXBsZW1lbnRfMjJfbDY6CmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmNhbGxzdWIgZ2V0YXBwYWRkcl81CmNhbGxzdWIgc2VuZGFzc2V0XzYKcmV0c3ViCgovLyBhbWVuZF9vcmRlcgphbWVuZG9yZGVyXzIzOgpwcm90byAzIDEKaW50Y18wIC8vIDAKdHhuIFR5cGVFbnVtCnB1c2hpbnQgNiAvLyBhcHBsCj09CmFzc2VydAp0eG5hIEFwcGxpY2F0aW9uQXJncyAwCmJ5dGVjIDE5IC8vICJhbWVuZF9vcmRlcih1aW50NjQsdWludDY0LHVpbnQ2NCl1aW50OCIKPT0KYXNzZXJ0CnR4biBTZW5kZXIKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cj09CmFzc2VydApieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmFzc2VydApmcmFtZV9kaWcgLTMKaW50Y18wIC8vIDAKPgphc3NlcnQKZnJhbWVfZGlnIC0zCmludGNfMiAvLyAxMDAwMDAwCjwKYXNzZXJ0CmZyYW1lX2RpZyAtMgppbnRjXzAgLy8gMAo+CmFzc2VydApmcmFtZV9kaWcgLTMKYnl0ZWNfMiAvLyAicHJpY2UiCmFwcF9nbG9iYWxfZ2V0CiE9CmZyYW1lX2RpZyAtMgpieXRlYyA2IC8vICJxdWFudGl0eSIKYXBwX2dsb2JhbF9nZXQKIT0KfHwKZnJhbWVfZGlnIC0xCmJ5dGVjIDQgLy8gInNsaXBwYWdlIgphcHBfZ2xvYmFsX2dldAohPQp8fAphc3NlcnQKYnl0ZWNfMyAvLyAic2lkZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18xIC8vIDEKPT0KYm56IGFtZW5kb3JkZXJfMjNfbDUKYnl0ZWMgMTUgLy8gImFzc2V0X2xpc3RlZCIKYXBwX2dsb2JhbF9nZXQKc3RvcmUgMTMKZnJhbWVfZGlnIC0yCmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldAo+CmJueiBhbWVuZG9yZGVyXzIzX2w0CmJ5dGVjIDYgLy8gInF1YW50aXR5IgphcHBfZ2xvYmFsX2dldApmcmFtZV9kaWcgLTIKLQpzdG9yZSAxMgpsb2FkIDEyCmludGNfMCAvLyAwCj4KYnogYW1lbmRvcmRlcl8yM19sOQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpsb2FkIDEyCmxvYWQgMTMKdHhuIFNlbmRlcgpjYWxsc3ViIHNlbmRhc3NldF82CmIgYW1lbmRvcmRlcl8yM19sOQphbWVuZG9yZGVyXzIzX2w0OgpmcmFtZV9kaWcgLTIKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmFwcF9nbG9iYWxfZ2V0Ci0Kc3RvcmUgMTIKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDAKPgphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBUeXBlRW51bQppbnRjXzMgLy8gYXhmZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgQXNzZXRSZWNlaXZlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKbG9hZCAxMwo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBBc3NldEFtb3VudApsb2FkIDEyCj09CmFzc2VydApiIGFtZW5kb3JkZXJfMjNfbDkKYW1lbmRvcmRlcl8yM19sNToKYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwoqCmludGNfMiAvLyAxMDAwMDAwCi8KYnl0ZWMgNiAvLyAicXVhbnRpdHkiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjXzIgLy8gInByaWNlIgphcHBfZ2xvYmFsX2dldApieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKKwpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyAxMyAvLyAiZmVlX2Jhc2VfcGVyY2VudCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKY2FsbHN1YiBjYWxjdWxhdGVmZWVjb21taXRfMworCnN0b3JlIDEwCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTMKZnJhbWVfZGlnIC0xCisKKgppbnRjXzIgLy8gMTAwMDAwMAovCmZyYW1lX2RpZyAtMgpmcmFtZV9kaWcgLTMKZnJhbWVfZGlnIC0xCisKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTMgLy8gImZlZV9iYXNlX3BlcmNlbnQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmNhbGxzdWIgY2FsY3VsYXRlZmVlY29tbWl0XzMKKwpzdG9yZSAxMQpsb2FkIDExCmxvYWQgMTAKPgpibnogYW1lbmRvcmRlcl8yM19sOApsb2FkIDEwCmxvYWQgMTEKLQpzdG9yZSAxMgpsb2FkIDEyCmludGNfMCAvLyAwCj4KYnogYW1lbmRvcmRlcl8yM19sOQpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwpsb2FkIDEyCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDkgLy8gImNvbGxhdGVyYWxfYXNzZXRfaWQiCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CnR4biBTZW5kZXIKY2FsbHN1YiBzZW5kYXNzZXRfNgpiIGFtZW5kb3JkZXJfMjNfbDkKYW1lbmRvcmRlcl8yM19sODoKbG9hZCAxMQpsb2FkIDEwCi0Kc3RvcmUgMTIKdHhuIEdyb3VwSW5kZXgKaW50Y18wIC8vIDAKPgphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBUeXBlRW51bQppbnRjXzMgLy8gYXhmZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgU2VuZGVyCnR4biBTZW5kZXIKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgQXNzZXRSZWNlaXZlcgpnbG9iYWwgQ3VycmVudEFwcGxpY2F0aW9uQWRkcmVzcwo9PQphc3NlcnQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhucyBYZmVyQXNzZXQKYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgOSAvLyAiY29sbGF0ZXJhbF9hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKPT0KYXNzZXJ0CnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnMgQXNzZXRBbW91bnQKbG9hZCAxMgo9PQphc3NlcnQKYW1lbmRvcmRlcl8yM19sOToKYnl0ZWNfMiAvLyAicHJpY2UiCmZyYW1lX2RpZyAtMwphcHBfZ2xvYmFsX3B1dApieXRlYyA2IC8vICJxdWFudGl0eSIKZnJhbWVfZGlnIC0yCmFwcF9nbG9iYWxfcHV0CmJ5dGVjIDQgLy8gInNsaXBwYWdlIgpmcmFtZV9kaWcgLTEKYXBwX2dsb2JhbF9wdXQKYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmFwcF9nbG9iYWxfcHV0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjIDQgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gbWF0Y2hfdGFrZXIKbWF0Y2h0YWtlcl8yNDoKcHJvdG8gMSAxCmludGNfMCAvLyAwCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKY2FsbHN1YiB2YWxpZGF0ZXRha2VybWF0Y2hncm91cF8xOApmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDQgLy8gInNsaXBwYWdlIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAppbnRjXzAgLy8gMAo+CmJueiBtYXRjaHRha2VyXzI0X2wxMQptYXRjaHRha2VyXzI0X2wxOgpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpibnogbWF0Y2h0YWtlcl8yNF9sMTAKbWF0Y2h0YWtlcl8yNF9sMjoKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYm56IG1hdGNodGFrZXJfMjRfbDkKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNodGFrZXJfMjRfbDgKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18xIC8vIDEKPT0KJiYKfHwKYm56IG1hdGNodGFrZXJfMjRfbDcKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMSAvLyAxCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmFwcF9nbG9iYWxfZ2V0CmludGNfMSAvLyAxCj09CmJ5dGVjXzMgLy8gInNpZGUiCmFwcF9nbG9iYWxfZ2V0CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMSAvLyAicG9zaXRpb24iCmNhbGxzdWIgZ2xvYmFsbXVzdGdldF80CmludGNfMCAvLyAwCj09CiYmCmZyYW1lX2RpZyAtMQp0eG5hcyBBcHBsaWNhdGlvbnMKYnl0ZWNfMyAvLyAic2lkZSIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaW50Y18wIC8vIDAKPT0KJiYKfHwKYnogbWF0Y2h0YWtlcl8yNF9sMTIKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmNhbGxzdWIgaGFuZGxldGFrZXJhc2thc2tjb21wbGVtZW50XzIyCmIgbWF0Y2h0YWtlcl8yNF9sMTIKbWF0Y2h0YWtlcl8yNF9sNzoKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmNhbGxzdWIgaGFuZGxldGFrZXJiaWRiaWRjb21wbGVtZW50XzIxCmIgbWF0Y2h0YWtlcl8yNF9sMTIKbWF0Y2h0YWtlcl8yNF9sODoKZnJhbWVfZGlnIC0xCnR4bmFzIEFwcGxpY2F0aW9ucwp0eG4gR3JvdXBJbmRleAppbnRjXzEgLy8gMQotCmd0eG5zYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmNhbGxzdWIgaGFuZGxldGFrZXJiaWRhc2thc2tfMjAKYiBtYXRjaHRha2VyXzI0X2wxMgptYXRjaHRha2VyXzI0X2w5OgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCnR4biBHcm91cEluZGV4CmludGNfMSAvLyAxCi0KZ3R4bnNhIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKY2FsbHN1YiBoYW5kbGV0YWtlcmJpZGFza2JpZF8xOQpiIG1hdGNodGFrZXJfMjRfbDEyCm1hdGNodGFrZXJfMjRfbDEwOgpnbG9iYWwgTGF0ZXN0VGltZXN0YW1wCmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKYXBwX2dsb2JhbF9nZXQKcHVzaGludCAxMjAgLy8gMTIwCisKPAphc3NlcnQKYiBtYXRjaHRha2VyXzI0X2wyCm1hdGNodGFrZXJfMjRfbDExOgpieXRlYyA0IC8vICJzbGlwcGFnZSIKYXBwX2dsb2JhbF9nZXQKaW50Y18wIC8vIDAKPgpmcmFtZV9kaWcgLTEKdHhuYXMgQXBwbGljYXRpb25zCmJ5dGVjIDcgLy8gImZlZV90aW1lcl9zdGFydCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKYnl0ZWMgNyAvLyAiZmVlX3RpbWVyX3N0YXJ0IgphcHBfZ2xvYmFsX2dldAo8PQomJgphc3NlcnQKYiBtYXRjaHRha2VyXzI0X2wxCm1hdGNodGFrZXJfMjRfbDEyOgpieXRlYyA4IC8vICJxdWFudGl0eV9maWxsZWQiCmJ5dGVjIDggLy8gInF1YW50aXR5X2ZpbGxlZCIKYXBwX2dsb2JhbF9nZXQKdHhuIEdyb3VwSW5kZXgKaW50Y18xIC8vIDEKLQpndHhuc2EgQXBwbGljYXRpb25BcmdzIDIKYnRvaQorCmFwcF9nbG9iYWxfcHV0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApyZXRzdWIKCi8vIGRlbGV0ZQpkZWxldGVfMjU6CnByb3RvIDAgMQppbnRjXzAgLy8gMAp0eG4gU2VuZGVyCmdsb2JhbCBDcmVhdG9yQWRkcmVzcwo9PQp0eG4gU2VuZGVyCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CnB1c2hieXRlcyAweDY1NzM2MzcyNmY3NzVmNjM2MTZlNjM2NTZjNWY2MTY0NjQ3MjY1NzM3MyAvLyAiZXNjcm93X2NhbmNlbF9hZGRyZXNzIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAo9PQp8fAphc3NlcnQKaXR4bl9iZWdpbgppbnRjXzMgLy8gYXhmZXIKaXR4bl9maWVsZCBUeXBlRW51bQpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApieXRlYyA5IC8vICJjb2xsYXRlcmFsX2Fzc2V0X2lkIgpjYWxsc3ViIGdsb2JhbG11c3RnZXRfNAppdHhuX2ZpZWxkIFhmZXJBc3NldApieXRlYyA1IC8vICJvd25lciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBBc3NldFJlY2VpdmVyCmludGNfMCAvLyAwCml0eG5fZmllbGQgRmVlCmludGNfMCAvLyAwCml0eG5fZmllbGQgQXNzZXRBbW91bnQKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRDbG9zZVRvCml0eG5fc3VibWl0Cml0eG5fYmVnaW4KaW50Y18zIC8vIGF4ZmVyCml0eG5fZmllbGQgVHlwZUVudW0KYnl0ZWNfMCAvLyAibWFya2V0X2FwcF9pZCIKYXBwX2dsb2JhbF9nZXQKYnl0ZWMgMTEgLy8gInllc19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaXR4bl9maWVsZCBYZmVyQXNzZXQKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmJ5dGVjIDUgLy8gIm93bmVyIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMyAvLyBheGZlcgppdHhuX2ZpZWxkIFR5cGVFbnVtCmJ5dGVjXzAgLy8gIm1hcmtldF9hcHBfaWQiCmFwcF9nbG9iYWxfZ2V0CmJ5dGVjIDEyIC8vICJub19hc3NldF9pZCIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKaXR4bl9maWVsZCBYZmVyQXNzZXQKYnl0ZWMgNSAvLyAib3duZXIiCmFwcF9nbG9iYWxfZ2V0Cml0eG5fZmllbGQgQXNzZXRSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFzc2V0QW1vdW50CmJ5dGVjIDUgLy8gIm93bmVyIgphcHBfZ2xvYmFsX2dldAppdHhuX2ZpZWxkIEFzc2V0Q2xvc2VUbwppdHhuX3N1Ym1pdAppdHhuX2JlZ2luCmludGNfMSAvLyBwYXkKaXR4bl9maWVsZCBUeXBlRW51bQppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEFtb3VudApieXRlYyA1IC8vICJvd25lciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBSZWNlaXZlcgppbnRjXzAgLy8gMAppdHhuX2ZpZWxkIEZlZQpieXRlYyA1IC8vICJvd25lciIKYXBwX2dsb2JhbF9nZXQKaXR4bl9maWVsZCBDbG9zZVJlbWFpbmRlclRvCml0eG5fc3VibWl0CmludGNfMSAvLyAxCmZyYW1lX2J1cnkgMApmcmFtZV9kaWcgMAppbnRjIDQgLy8gMjU2CjwKYXNzZXJ0CnJldHN1YgoKLy8gb25fdXBkYXRlCm9udXBkYXRlXzI2Ogpwcm90byAwIDEKaW50Y18wIC8vIDAKdHhuIFNlbmRlcgpieXRlY18wIC8vICJtYXJrZXRfYXBwX2lkIgphcHBfZ2xvYmFsX2dldApwdXNoYnl0ZXMgMHg2ZDYxNzI2YjY1NzQ1ZjY2NzI2OTY1NmU2NDVmNjE2NDY0NzIgLy8gIm1hcmtldF9mcmllbmRfYWRkciIKY2FsbHN1YiBnbG9iYWxtdXN0Z2V0XzQKPT0KZ2xvYmFsIEdyb3VwU2l6ZQppbnRjXzEgLy8gMQo9PQomJgphc3NlcnQKaW50Y18xIC8vIDEKZnJhbWVfYnVyeSAwCnJldHN1YgoKLy8gb25fY3JlYXRlX2Nhc3RlcgpvbmNyZWF0ZWNhc3Rlcl8yNzoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmNhbGxzdWIgb25jcmVhdGVfOQpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpieXRlYyAxNCAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIHNldHVwX2Nhc3RlcgpzZXR1cGNhc3Rlcl8yODoKcHJvdG8gMCAwCmludGNfMCAvLyAwCmJ5dGVjIDIxIC8vICIiCmR1cG4gNAp0eG5hIEFwcGxpY2F0aW9uQXJncyAxCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmZyYW1lX2J1cnkgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmZyYW1lX2J1cnkgMwp0eG5hIEFwcGxpY2F0aW9uQXJncyA0CmZyYW1lX2J1cnkgNAp0eG5hIEFwcGxpY2F0aW9uQXJncyA1CmZyYW1lX2J1cnkgNQpmcmFtZV9kaWcgMQpmcmFtZV9kaWcgMgpmcmFtZV9kaWcgMwpmcmFtZV9kaWcgNApmcmFtZV9kaWcgNQpjYWxsc3ViIHNldHVwXzEwCmZyYW1lX2J1cnkgMApieXRlYyAxMCAvLyAweDE1MWY3Yzc1CmJ5dGVjIDE0IC8vIDB4MDAKaW50Y18wIC8vIDAKZnJhbWVfZGlnIDAKc2V0Ynl0ZQpjb25jYXQKbG9nCnJldHN1YgoKLy8gbWF0Y2hfbWFrZXJfY2FzdGVyCm1hdGNobWFrZXJjYXN0ZXJfMjk6CnByb3RvIDAgMAppbnRjXzAgLy8gMApkdXBuIDIKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMQppbnRjXzAgLy8gMApnZXRieXRlCmZyYW1lX2J1cnkgMQp0eG5hIEFwcGxpY2F0aW9uQXJncyAyCmJ0b2kKZnJhbWVfYnVyeSAyCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmNhbGxzdWIgbWF0Y2htYWtlcl8xNwpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpieXRlYyAxNCAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGFtZW5kX29yZGVyX2Nhc3RlcgphbWVuZG9yZGVyY2FzdGVyXzMwOgpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwbiAzCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKYnRvaQpmcmFtZV9idXJ5IDEKdHhuYSBBcHBsaWNhdGlvbkFyZ3MgMgpidG9pCmZyYW1lX2J1cnkgMgp0eG5hIEFwcGxpY2F0aW9uQXJncyAzCmJ0b2kKZnJhbWVfYnVyeSAzCmZyYW1lX2RpZyAxCmZyYW1lX2RpZyAyCmZyYW1lX2RpZyAzCmNhbGxzdWIgYW1lbmRvcmRlcl8yMwpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpieXRlYyAxNCAvLyAweDAwCmludGNfMCAvLyAwCmZyYW1lX2RpZyAwCnNldGJ5dGUKY29uY2F0CmxvZwpyZXRzdWIKCi8vIG1hdGNoX3Rha2VyX2Nhc3RlcgptYXRjaHRha2VyY2FzdGVyXzMxOgpwcm90byAwIDAKaW50Y18wIC8vIDAKZHVwCnR4bmEgQXBwbGljYXRpb25BcmdzIDEKaW50Y18wIC8vIDAKZ2V0Ynl0ZQpmcmFtZV9idXJ5IDEKZnJhbWVfZGlnIDEKY2FsbHN1YiBtYXRjaHRha2VyXzI0CmZyYW1lX2J1cnkgMApieXRlYyAxMCAvLyAweDE1MWY3Yzc1CmZyYW1lX2RpZyAwCml0b2IKY29uY2F0CmxvZwpyZXRzdWIKCi8vIGRlbGV0ZV9jYXN0ZXIKZGVsZXRlY2FzdGVyXzMyOgpwcm90byAwIDAKaW50Y18wIC8vIDAKY2FsbHN1YiBkZWxldGVfMjUKZnJhbWVfYnVyeSAwCmJ5dGVjIDEwIC8vIDB4MTUxZjdjNzUKYnl0ZWMgMTQgLy8gMHgwMAppbnRjXzAgLy8gMApmcmFtZV9kaWcgMApzZXRieXRlCmNvbmNhdApsb2cKcmV0c3ViCgovLyBvbl91cGRhdGVfY2FzdGVyCm9udXBkYXRlY2FzdGVyXzMzOgpwcm90byAwIDAKaW50Y18wIC8vIDAKY2FsbHN1YiBvbnVwZGF0ZV8yNgpmcmFtZV9idXJ5IDAKYnl0ZWMgMTAgLy8gMHgxNTFmN2M3NQpmcmFtZV9kaWcgMAppdG9iCmNvbmNhdApsb2cKcmV0c3Vi",
1311
+ "clear": "I3ByYWdtYSB2ZXJzaW9uIDgKcHVzaGludCAwIC8vIDAKcmV0dXJu"
1312
+ },
1313
+ "state": {
1314
+ "global": {
1315
+ "num_byte_slices": 1,
1316
+ "num_uints": 9
1317
+ },
1318
+ "local": {
1319
+ "num_byte_slices": 0,
1320
+ "num_uints": 0
1321
+ }
1322
+ },
1323
+ "schema": {
1324
+ "global": {
1325
+ "declared": {
1326
+ "asset_listed": {
1327
+ "type": "uint64",
1328
+ "key": "asset_listed",
1329
+ "descr": "The asset id of the escrow"
1330
+ },
1331
+ "fee_timer_start": {
1332
+ "type": "uint64",
1333
+ "key": "fee_timer_start",
1334
+ "descr": "The timestamp of the fee timer start"
1335
+ },
1336
+ "market_app_id": {
1337
+ "type": "uint64",
1338
+ "key": "market_app_id",
1339
+ "descr": "The id of the market app"
1340
+ },
1341
+ "owner": {
1342
+ "type": "bytes",
1343
+ "key": "owner",
1344
+ "descr": "The owner of the escrow"
1345
+ },
1346
+ "position": {
1347
+ "type": "uint64",
1348
+ "key": "position",
1349
+ "descr": "The position of the escrow: yes/no"
1350
+ },
1351
+ "price": {
1352
+ "type": "uint64",
1353
+ "key": "price",
1354
+ "descr": "The price of the escrow"
1355
+ },
1356
+ "quantity": {
1357
+ "type": "uint64",
1358
+ "key": "quantity",
1359
+ "descr": "The quantity of the escrow"
1360
+ },
1361
+ "quantity_filled": {
1362
+ "type": "uint64",
1363
+ "key": "quantity_filled",
1364
+ "descr": "The quantity of the escrow filled"
1365
+ },
1366
+ "side": {
1367
+ "type": "uint64",
1368
+ "key": "side",
1369
+ "descr": "The side of the escrow: buy/sell"
1370
+ },
1371
+ "slippage": {
1372
+ "type": "uint64",
1373
+ "key": "slippage",
1374
+ "descr": "The slippage of the escrow. 0 if limit."
1375
+ }
1376
+ },
1377
+ "reserved": {}
1378
+ },
1379
+ "local": {
1380
+ "declared": {},
1381
+ "reserved": {}
1382
+ }
1383
+ },
1384
+ "contract": {
1385
+ "name": "escrow_app",
1386
+ "methods": [
1387
+ {
1388
+ "name": "on_create",
1389
+ "args": [],
1390
+ "returns": {
1391
+ "type": "uint8"
1392
+ }
1393
+ },
1394
+ {
1395
+ "name": "setup",
1396
+ "args": [
1397
+ {
1398
+ "type": "string",
1399
+ "name": "position"
1400
+ },
1401
+ {
1402
+ "type": "string",
1403
+ "name": "price"
1404
+ },
1405
+ {
1406
+ "type": "string",
1407
+ "name": "side"
1408
+ },
1409
+ {
1410
+ "type": "string",
1411
+ "name": "quantity"
1412
+ },
1413
+ {
1414
+ "type": "string",
1415
+ "name": "slippage"
1416
+ }
1417
+ ],
1418
+ "returns": {
1419
+ "type": "uint8"
1420
+ }
1421
+ },
1422
+ {
1423
+ "name": "match_maker",
1424
+ "args": [
1425
+ {
1426
+ "type": "application",
1427
+ "name": "taker"
1428
+ },
1429
+ {
1430
+ "type": "uint64",
1431
+ "name": "match_quantity"
1432
+ }
1433
+ ],
1434
+ "returns": {
1435
+ "type": "uint8"
1436
+ }
1437
+ },
1438
+ {
1439
+ "name": "amend_order",
1440
+ "args": [
1441
+ {
1442
+ "type": "uint64",
1443
+ "name": "price"
1444
+ },
1445
+ {
1446
+ "type": "uint64",
1447
+ "name": "quantity"
1448
+ },
1449
+ {
1450
+ "type": "uint64",
1451
+ "name": "slippage"
1452
+ }
1453
+ ],
1454
+ "returns": {
1455
+ "type": "uint8"
1456
+ }
1457
+ },
1458
+ {
1459
+ "name": "match_taker",
1460
+ "args": [
1461
+ {
1462
+ "type": "application",
1463
+ "name": "maker"
1464
+ }
1465
+ ],
1466
+ "returns": {
1467
+ "type": "uint64"
1468
+ }
1469
+ },
1470
+ {
1471
+ "name": "delete",
1472
+ "args": [],
1473
+ "returns": {
1474
+ "type": "uint8"
1475
+ }
1476
+ },
1477
+ {
1478
+ "name": "on_update",
1479
+ "args": [],
1480
+ "returns": {
1481
+ "type": "uint64"
1482
+ }
1483
+ }
1484
+ ],
1485
+ "networks": {}
1486
+ },
1487
+ "bare_call_config": {
1488
+ "no_op": "CREATE"
1489
+ }
1490
+ };
1491
+ var EscrowAppCallFactory = class {
1492
+ /**
1493
+ * Gets available create call factories
1494
+ */
1495
+ static get create() {
1496
+ return {
1497
+ /**
1498
+ * Constructs a create call for the escrow_app smart contract using a bare call
1499
+ *
1500
+ * @param params Any parameters for the call
1501
+ * @returns A TypedCallParams object for the call
1502
+ */
1503
+ bare(params = {}) {
1504
+ return {
1505
+ method: void 0,
1506
+ methodArgs: void 0,
1507
+ ...params
1508
+ };
1509
+ },
1510
+ /**
1511
+ * Constructs a create call for the escrow_app smart contract using the on_create()uint8 ABI method
1512
+ *
1513
+ * @param args Any args for the contract call
1514
+ * @param params Any additional parameters for the call
1515
+ * @returns A TypedCallParams object for the call
1516
+ */
1517
+ onCreate(args, params = {}) {
1518
+ return {
1519
+ method: "on_create()uint8",
1520
+ methodArgs: Array.isArray(args) ? args : [],
1521
+ ...params
1522
+ };
1523
+ }
1524
+ };
1525
+ }
1526
+ /**
1527
+ * Gets available update call factories
1528
+ */
1529
+ static get update() {
1530
+ return {
1531
+ /**
1532
+ * Constructs an update call for the escrow_app smart contract using the on_update()uint64 ABI method
1533
+ *
1534
+ * @param args Any args for the contract call
1535
+ * @param params Any additional parameters for the call
1536
+ * @returns A TypedCallParams object for the call
1537
+ */
1538
+ onUpdate(args, params = {}) {
1539
+ return {
1540
+ method: "on_update()uint64",
1541
+ methodArgs: Array.isArray(args) ? args : [],
1542
+ ...params
1543
+ };
1544
+ }
1545
+ };
1546
+ }
1547
+ /**
1548
+ * Gets available delete call factories
1549
+ */
1550
+ static get delete() {
1551
+ return {
1552
+ /**
1553
+ * Constructs a delete call for the escrow_app smart contract using the delete()uint8 ABI method
1554
+ *
1555
+ * @param args Any args for the contract call
1556
+ * @param params Any additional parameters for the call
1557
+ * @returns A TypedCallParams object for the call
1558
+ */
1559
+ delete(args, params = {}) {
1560
+ return {
1561
+ method: "delete()uint8",
1562
+ methodArgs: Array.isArray(args) ? args : [],
1563
+ ...params
1564
+ };
1565
+ }
1566
+ };
1567
+ }
1568
+ /**
1569
+ * Constructs a no op call for the setup(string,string,string,string,string)uint8 ABI method
1570
+ *
1571
+ * @param args Any args for the contract call
1572
+ * @param params Any additional parameters for the call
1573
+ * @returns A TypedCallParams object for the call
1574
+ */
1575
+ static setup(args, params) {
1576
+ return {
1577
+ method: "setup(string,string,string,string,string)uint8",
1578
+ methodArgs: Array.isArray(args) ? args : [args.position, args.price, args.side, args.quantity, args.slippage],
1579
+ ...params
1580
+ };
1581
+ }
1582
+ /**
1583
+ * Constructs a no op call for the match_maker(application,uint64)uint8 ABI method
1584
+ *
1585
+ * @param args Any args for the contract call
1586
+ * @param params Any additional parameters for the call
1587
+ * @returns A TypedCallParams object for the call
1588
+ */
1589
+ static matchMaker(args, params) {
1590
+ return {
1591
+ method: "match_maker(application,uint64)uint8",
1592
+ methodArgs: Array.isArray(args) ? args : [args.taker, args.matchQuantity],
1593
+ ...params
1594
+ };
1595
+ }
1596
+ /**
1597
+ * Constructs a no op call for the amend_order(uint64,uint64,uint64)uint8 ABI method
1598
+ *
1599
+ * @param args Any args for the contract call
1600
+ * @param params Any additional parameters for the call
1601
+ * @returns A TypedCallParams object for the call
1602
+ */
1603
+ static amendOrder(args, params) {
1604
+ return {
1605
+ method: "amend_order(uint64,uint64,uint64)uint8",
1606
+ methodArgs: Array.isArray(args) ? args : [args.price, args.quantity, args.slippage],
1607
+ ...params
1608
+ };
1609
+ }
1610
+ /**
1611
+ * Constructs a no op call for the match_taker(application)uint64 ABI method
1612
+ *
1613
+ * @param args Any args for the contract call
1614
+ * @param params Any additional parameters for the call
1615
+ * @returns A TypedCallParams object for the call
1616
+ */
1617
+ static matchTaker(args, params) {
1618
+ return {
1619
+ method: "match_taker(application)uint64",
1620
+ methodArgs: Array.isArray(args) ? args : [args.maker],
1621
+ ...params
1622
+ };
1623
+ }
1624
+ };
1625
+ var EscrowAppClient = class _EscrowAppClient {
1626
+ /**
1627
+ * Creates a new instance of `EscrowAppClient`
1628
+ *
1629
+ * @param appDetails appDetails The details to identify the app to deploy
1630
+ * @param algod An algod client instance
1631
+ */
1632
+ constructor(appDetails, algod) {
1633
+ this.algod = algod;
1634
+ this.sender = appDetails.sender;
1635
+ this.appClient = algokit4.getAppClient({
1636
+ ...appDetails,
1637
+ app: APP_SPEC3
1638
+ }, algod);
1639
+ }
1640
+ /**
1641
+ * The underlying `ApplicationClient` for when you want to have more flexibility
1642
+ */
1643
+ appClient;
1644
+ sender;
1645
+ /**
1646
+ * Checks for decode errors on the AppCallTransactionResult and maps the return value to the specified generic type
1647
+ *
1648
+ * @param result The AppCallTransactionResult to be mapped
1649
+ * @param returnValueFormatter An optional delegate to format the return value if required
1650
+ * @returns The smart contract response with an updated return value
1651
+ */
1652
+ mapReturnValue(result, returnValueFormatter) {
1653
+ if (result.return?.decodeError) {
1654
+ throw result.return.decodeError;
1655
+ }
1656
+ const returnValue = result.return?.returnValue !== void 0 && returnValueFormatter !== void 0 ? returnValueFormatter(result.return.returnValue) : result.return?.returnValue;
1657
+ return { ...result, return: returnValue };
1658
+ }
1659
+ /**
1660
+ * Calls the ABI method with the matching signature using an onCompletion code of NO_OP
1661
+ *
1662
+ * @param typedCallParams An object containing the method signature, args, and any other relevant parameters
1663
+ * @param returnValueFormatter An optional delegate which when provided will be used to map non-undefined return values to the target type
1664
+ * @returns The result of the smart contract call
1665
+ */
1666
+ async call(typedCallParams, returnValueFormatter) {
1667
+ return this.mapReturnValue(await this.appClient.call(typedCallParams), returnValueFormatter);
1668
+ }
1669
+ /**
1670
+ * Idempotently deploys the escrow_app smart contract.
1671
+ *
1672
+ * @param params The arguments for the contract calls and any additional parameters for the call
1673
+ * @returns The deployment result
1674
+ */
1675
+ deploy(params = {}) {
1676
+ const createArgs = params.createCall?.(EscrowAppCallFactory.create);
1677
+ const updateArgs = params.updateCall?.(EscrowAppCallFactory.update);
1678
+ const deleteArgs = params.deleteCall?.(EscrowAppCallFactory.delete);
1679
+ return this.appClient.deploy({
1680
+ ...params,
1681
+ updateArgs,
1682
+ deleteArgs,
1683
+ createArgs,
1684
+ createOnCompleteAction: createArgs?.onCompleteAction
1685
+ });
1686
+ }
1687
+ /**
1688
+ * Gets available create methods
1689
+ */
1690
+ get create() {
1691
+ const $this = this;
1692
+ return {
1693
+ /**
1694
+ * Creates a new instance of the escrow_app smart contract using a bare call.
1695
+ *
1696
+ * @param args The arguments for the bare call
1697
+ * @returns The create result
1698
+ */
1699
+ async bare(args = {}) {
1700
+ return $this.mapReturnValue(await $this.appClient.create(args));
1701
+ },
1702
+ /**
1703
+ * Creates a new instance of the escrow_app smart contract using the on_create()uint8 ABI method.
1704
+ *
1705
+ * @param args The arguments for the smart contract call
1706
+ * @param params Any additional parameters for the call
1707
+ * @returns The create result
1708
+ */
1709
+ async onCreate(args, params = {}) {
1710
+ return $this.mapReturnValue(await $this.appClient.create(EscrowAppCallFactory.create.onCreate(args, params)));
1711
+ }
1712
+ };
1713
+ }
1714
+ /**
1715
+ * Gets available update methods
1716
+ */
1717
+ get update() {
1718
+ const $this = this;
1719
+ return {
1720
+ /**
1721
+ * Updates an existing instance of the escrow_app smart contract using the on_update()uint64 ABI method.
1722
+ *
1723
+ * @param args The arguments for the smart contract call
1724
+ * @param params Any additional parameters for the call
1725
+ * @returns The update result
1726
+ */
1727
+ async onUpdate(args, params = {}) {
1728
+ return $this.mapReturnValue(await $this.appClient.update(EscrowAppCallFactory.update.onUpdate(args, params)));
1729
+ }
1730
+ };
1731
+ }
1732
+ /**
1733
+ * Gets available delete methods
1734
+ */
1735
+ get delete() {
1736
+ const $this = this;
1737
+ return {
1738
+ /**
1739
+ * Deletes an existing instance of the escrow_app smart contract using the delete()uint8 ABI method.
1740
+ *
1741
+ * @param args The arguments for the smart contract call
1742
+ * @param params Any additional parameters for the call
1743
+ * @returns The delete result
1744
+ */
1745
+ async delete(args, params = {}) {
1746
+ return $this.mapReturnValue(await $this.appClient.delete(EscrowAppCallFactory.delete.delete(args, params)));
1747
+ }
1748
+ };
1749
+ }
1750
+ /**
1751
+ * Makes a clear_state call to an existing instance of the escrow_app smart contract.
1752
+ *
1753
+ * @param args The arguments for the bare call
1754
+ * @returns The clear_state result
1755
+ */
1756
+ clearState(args = {}) {
1757
+ return this.appClient.clearState(args);
1758
+ }
1759
+ /**
1760
+ * Calls the setup(string,string,string,string,string)uint8 ABI method.
1761
+ *
1762
+ * @param args The arguments for the contract call
1763
+ * @param params Any additional parameters for the call
1764
+ * @returns The result of the call
1765
+ */
1766
+ setup(args, params = {}) {
1767
+ return this.call(EscrowAppCallFactory.setup(args, params));
1768
+ }
1769
+ /**
1770
+ * Calls the match_maker(application,uint64)uint8 ABI method.
1771
+ *
1772
+ * @param args The arguments for the contract call
1773
+ * @param params Any additional parameters for the call
1774
+ * @returns The result of the call
1775
+ */
1776
+ matchMaker(args, params = {}) {
1777
+ return this.call(EscrowAppCallFactory.matchMaker(args, params));
1778
+ }
1779
+ /**
1780
+ * Calls the amend_order(uint64,uint64,uint64)uint8 ABI method.
1781
+ *
1782
+ * @param args The arguments for the contract call
1783
+ * @param params Any additional parameters for the call
1784
+ * @returns The result of the call
1785
+ */
1786
+ amendOrder(args, params = {}) {
1787
+ return this.call(EscrowAppCallFactory.amendOrder(args, params));
1788
+ }
1789
+ /**
1790
+ * Calls the match_taker(application)uint64 ABI method.
1791
+ *
1792
+ * @param args The arguments for the contract call
1793
+ * @param params Any additional parameters for the call
1794
+ * @returns The result of the call
1795
+ */
1796
+ matchTaker(args, params = {}) {
1797
+ return this.call(EscrowAppCallFactory.matchTaker(args, params));
1798
+ }
1799
+ /**
1800
+ * Extracts a binary state value out of an AppState dictionary
1801
+ *
1802
+ * @param state The state dictionary containing the state value
1803
+ * @param key The key of the state value
1804
+ * @returns A BinaryState instance containing the state value, or undefined if the key was not found
1805
+ */
1806
+ static getBinaryState(state, key) {
1807
+ const value = state[key];
1808
+ if (!value) return void 0;
1809
+ if (!("valueRaw" in value))
1810
+ throw new Error(`Failed to parse state value for ${key}; received an int when expected a byte array`);
1811
+ return {
1812
+ asString() {
1813
+ return value.value;
1814
+ },
1815
+ asByteArray() {
1816
+ return value.valueRaw;
1817
+ }
1818
+ };
1819
+ }
1820
+ /**
1821
+ * Extracts a integer state value out of an AppState dictionary
1822
+ *
1823
+ * @param state The state dictionary containing the state value
1824
+ * @param key The key of the state value
1825
+ * @returns An IntegerState instance containing the state value, or undefined if the key was not found
1826
+ */
1827
+ static getIntegerState(state, key) {
1828
+ const value = state[key];
1829
+ if (!value) return void 0;
1830
+ if ("valueRaw" in value)
1831
+ throw new Error(`Failed to parse state value for ${key}; received a byte array when expected a number`);
1832
+ return {
1833
+ asBigInt() {
1834
+ return typeof value.value === "bigint" ? value.value : BigInt(value.value);
1835
+ },
1836
+ asNumber() {
1837
+ return typeof value.value === "bigint" ? Number(value.value) : value.value;
1838
+ }
1839
+ };
1840
+ }
1841
+ /**
1842
+ * Returns the smart contract's global state wrapped in a strongly typed accessor with options to format the stored value
1843
+ */
1844
+ async getGlobalState() {
1845
+ const state = await this.appClient.getGlobalState();
1846
+ return {
1847
+ get assetListed() {
1848
+ return _EscrowAppClient.getIntegerState(state, "asset_listed");
1849
+ },
1850
+ get feeTimerStart() {
1851
+ return _EscrowAppClient.getIntegerState(state, "fee_timer_start");
1852
+ },
1853
+ get marketAppId() {
1854
+ return _EscrowAppClient.getIntegerState(state, "market_app_id");
1855
+ },
1856
+ get owner() {
1857
+ return _EscrowAppClient.getBinaryState(state, "owner");
1858
+ },
1859
+ get position() {
1860
+ return _EscrowAppClient.getIntegerState(state, "position");
1861
+ },
1862
+ get price() {
1863
+ return _EscrowAppClient.getIntegerState(state, "price");
1864
+ },
1865
+ get quantity() {
1866
+ return _EscrowAppClient.getIntegerState(state, "quantity");
1867
+ },
1868
+ get quantityFilled() {
1869
+ return _EscrowAppClient.getIntegerState(state, "quantity_filled");
1870
+ },
1871
+ get side() {
1872
+ return _EscrowAppClient.getIntegerState(state, "side");
1873
+ },
1874
+ get slippage() {
1875
+ return _EscrowAppClient.getIntegerState(state, "slippage");
1876
+ }
1877
+ };
1878
+ }
1879
+ compose() {
1880
+ const client = this;
1881
+ const atc = new AtomicTransactionComposer();
1882
+ let promiseChain = Promise.resolve();
1883
+ const resultMappers = [];
1884
+ return {
1885
+ setup(args, params) {
1886
+ promiseChain = promiseChain.then(() => client.setup(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1887
+ resultMappers.push(void 0);
1888
+ return this;
1889
+ },
1890
+ matchMaker(args, params) {
1891
+ promiseChain = promiseChain.then(() => client.matchMaker(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1892
+ resultMappers.push(void 0);
1893
+ return this;
1894
+ },
1895
+ amendOrder(args, params) {
1896
+ promiseChain = promiseChain.then(() => client.amendOrder(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1897
+ resultMappers.push(void 0);
1898
+ return this;
1899
+ },
1900
+ matchTaker(args, params) {
1901
+ promiseChain = promiseChain.then(() => client.matchTaker(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1902
+ resultMappers.push(void 0);
1903
+ return this;
1904
+ },
1905
+ get update() {
1906
+ const $this = this;
1907
+ return {
1908
+ onUpdate(args, params) {
1909
+ promiseChain = promiseChain.then(() => client.update.onUpdate(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1910
+ resultMappers.push(void 0);
1911
+ return $this;
1912
+ }
1913
+ };
1914
+ },
1915
+ get delete() {
1916
+ const $this = this;
1917
+ return {
1918
+ delete(args, params) {
1919
+ promiseChain = promiseChain.then(() => client.delete.delete(args, { ...params, sendParams: { ...params?.sendParams, skipSending: true, atc } }));
1920
+ resultMappers.push(void 0);
1921
+ return $this;
1922
+ }
1923
+ };
1924
+ },
1925
+ clearState(args) {
1926
+ promiseChain = promiseChain.then(() => client.clearState({ ...args, sendParams: { ...args?.sendParams, skipSending: true, atc } }));
1927
+ resultMappers.push(void 0);
1928
+ return this;
1929
+ },
1930
+ addTransaction(txn, defaultSender) {
1931
+ promiseChain = promiseChain.then(async () => atc.addTransaction(await algokit4.getTransactionWithSigner(txn, defaultSender ?? client.sender)));
1932
+ return this;
1933
+ },
1934
+ async atc() {
1935
+ await promiseChain;
1936
+ return atc;
1937
+ },
1938
+ async simulate(options) {
1939
+ await promiseChain;
1940
+ const result = await atc.simulate(client.algod, new modelsv2.SimulateRequest({ txnGroups: [], ...options }));
1941
+ return {
1942
+ ...result,
1943
+ returns: result.methodResults?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
1944
+ };
1945
+ },
1946
+ async execute(sendParams) {
1947
+ await promiseChain;
1948
+ const result = await algokit4.sendAtomicTransactionComposer({ atc, sendParams }, client.algod);
1263
1949
  return {
1264
1950
  ...result,
1265
1951
  returns: result.returns?.map((val, i) => resultMappers[i] !== void 0 ? resultMappers[i](val.returnValue) : val.returnValue)
@@ -1634,7 +2320,7 @@ var createOrder = async (config, params) => {
1634
2320
  if (!isBuying) {
1635
2321
  const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);
1636
2322
  if (!hasUsdcOptIn) {
1637
- const optInTxn = await algokit3.transferAsset(
2323
+ const optInTxn = await algokit4.transferAsset(
1638
2324
  { from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },
1639
2325
  algodClient
1640
2326
  );
@@ -1645,7 +2331,7 @@ var createOrder = async (config, params) => {
1645
2331
  const assetId = position === 1 ? yesAssetId : noAssetId;
1646
2332
  const hasAssetOptIn = await checkAssetOptIn(algodClient, activeAddress, assetId);
1647
2333
  if (!hasAssetOptIn) {
1648
- const optInTxn = await algokit3.transferAsset(
2334
+ const optInTxn = await algokit4.transferAsset(
1649
2335
  { from: signerAccount, to: activeAddress, assetId, amount: 0, skipSending: true },
1650
2336
  algodClient
1651
2337
  );
@@ -1653,15 +2339,15 @@ var createOrder = async (config, params) => {
1653
2339
  createEscrowTxnIndex++;
1654
2340
  }
1655
2341
  }
1656
- const paymentTxn = await algokit3.transferAlgos(
1657
- { from: signerAccount, to: marketAddress, amount: algokit3.microAlgos(957e3), skipSending: true },
2342
+ const paymentTxn = await algokit4.transferAlgos(
2343
+ { from: signerAccount, to: marketAddress, amount: algokit4.microAlgos(963500), skipSending: true },
1658
2344
  algodClient
1659
2345
  );
1660
2346
  atc.addTransaction({ txn: paymentTxn.transaction, signer });
1661
2347
  createEscrowTxnIndex++;
1662
2348
  const fundAmount = isBuying ? Math.floor(quantity * (price + slippage) / 1e6) + fee : quantity;
1663
2349
  const fundAssetId = isBuying ? usdcAssetId : position === 1 ? yesAssetId : noAssetId;
1664
- const assetTransferTxn = await algokit3.transferAsset(
2350
+ const assetTransferTxn = await algokit4.transferAsset(
1665
2351
  { from: signerAccount, to: marketAddress, amount: fundAmount, assetId: fundAssetId, skipSending: true },
1666
2352
  algodClient
1667
2353
  );
@@ -1674,11 +2360,11 @@ var createOrder = async (config, params) => {
1674
2360
  atc.addTransaction({ txn: createEscrowTxn.transaction, signer });
1675
2361
  let matchIndex = 1;
1676
2362
  for (const matchingOrder of matchingOrders) {
1677
- const payCounterPartyTxn = await algokit3.transferAlgos(
2363
+ const payCounterPartyTxn = await algokit4.transferAlgos(
1678
2364
  {
1679
2365
  from: signerAccount,
1680
2366
  to: getApplicationAddress(matchingOrder.escrowAppId),
1681
- amount: algokit3.microAlgos(1e3 * (isBuying ? 1 : 2)),
2367
+ amount: algokit4.microAlgos(1e3 * (isBuying ? 1 : 2)),
1682
2368
  skipSending: true
1683
2369
  },
1684
2370
  algodClient
@@ -1697,7 +2383,7 @@ var createOrder = async (config, params) => {
1697
2383
  {
1698
2384
  assets: [usdcAssetId, yesAssetId, noAssetId],
1699
2385
  accounts: [activeAddress, marketFeeAddress, matchingOrder.owner],
1700
- sendParams: { skipSending: true, fee: algokit3.microAlgos(1e4) }
2386
+ sendParams: { skipSending: true, fee: algokit4.microAlgos(1e4) }
1701
2387
  }
1702
2388
  );
1703
2389
  atc.addTransaction({ txn: proposeAMatchTxn.transaction, signer });
@@ -1730,7 +2416,7 @@ var cancelOrder = async (config, params) => {
1730
2416
  apps: [escrowAppId],
1731
2417
  assets: [usdcAssetId, yesAssetId, noAssetId],
1732
2418
  accounts: [orderOwner],
1733
- sendParams: { skipSending: true, fee: algokit3.microAlgos(7e3) }
2419
+ sendParams: { skipSending: true, fee: algokit4.microAlgos(7e3) }
1734
2420
  }
1735
2421
  );
1736
2422
  atc.addTransaction({ txn: deleteCallTxn.transaction, signer });
@@ -1754,11 +2440,11 @@ var proposeMatch = async (config, params) => {
1754
2440
  algodClient
1755
2441
  );
1756
2442
  const atc = new AtomicTransactionComposer();
1757
- const payMakerTxn = await algokit3.transferAlgos(
2443
+ const payMakerTxn = await algokit4.transferAlgos(
1758
2444
  {
1759
2445
  from: signerAccount,
1760
2446
  to: getApplicationAddress(makerEscrowAppId),
1761
- amount: algokit3.microAlgos(2e3),
2447
+ amount: algokit4.microAlgos(2e3),
1762
2448
  skipSending: true
1763
2449
  },
1764
2450
  algodClient
@@ -1777,7 +2463,7 @@ var proposeMatch = async (config, params) => {
1777
2463
  {
1778
2464
  assets: [usdcAssetId, yesAssetId, noAssetId],
1779
2465
  accounts: [activeAddress, marketFeeAddress, makerAddress],
1780
- sendParams: { skipSending: true, fee: algokit3.microAlgos(1e4) }
2466
+ sendParams: { skipSending: true, fee: algokit4.microAlgos(1e4) }
1781
2467
  }
1782
2468
  );
1783
2469
  atc.addTransaction({ txn: proposeTxn.transaction, signer });
@@ -1788,6 +2474,68 @@ var proposeMatch = async (config, params) => {
1788
2474
  confirmedRound: result.confirmedRound
1789
2475
  };
1790
2476
  };
2477
+ var amendOrder = async (config, params) => {
2478
+ const { algodClient, signer, activeAddress, usdcAssetId } = config;
2479
+ const { marketAppId, escrowAppId, price, quantity, slippage = 0 } = params;
2480
+ const escrowAppInfo = await algodClient.getApplicationByID(escrowAppId).do();
2481
+ const escrowState = decodeGlobalState(
2482
+ escrowAppInfo.params?.["global-state"] ?? escrowAppInfo["params"]?.["global-state"] ?? []
2483
+ );
2484
+ if ((escrowState.quantity_filled ?? 0) > 0) {
2485
+ throw new Error("Cannot amend an order that has been partially or fully filled.");
2486
+ }
2487
+ const globalState = await getMarketGlobalState(algodClient, marketAppId);
2488
+ const yesAssetId = globalState.yes_asset_id;
2489
+ const noAssetId = globalState.no_asset_id;
2490
+ const feeBase = globalState.fee_base_percent;
2491
+ const isBuy = escrowState.side === 1;
2492
+ const position = escrowState.position;
2493
+ const computeCollateral = (qty, px, slip) => {
2494
+ if (isBuy) {
2495
+ const fee = calculateFee(qty, px + slip, feeBase);
2496
+ return Math.floor(qty * (px + slip) / 1e6) + fee;
2497
+ }
2498
+ return qty;
2499
+ };
2500
+ const oldCollateral = computeCollateral(
2501
+ escrowState.quantity ?? 0,
2502
+ escrowState.price ?? 0,
2503
+ escrowState.slippage ?? 0
2504
+ );
2505
+ const newCollateral = computeCollateral(quantity, price, slippage);
2506
+ const delta = newCollateral - oldCollateral;
2507
+ const fundAssetId = isBuy ? usdcAssetId : position === 1 ? yesAssetId : noAssetId;
2508
+ const escrowAddr = getApplicationAddress(escrowAppId).toString();
2509
+ const signerAccount = { signer, addr: activeAddress };
2510
+ const atc = new AtomicTransactionComposer();
2511
+ if (delta > 0) {
2512
+ const fundTxn = await algokit4.transferAsset(
2513
+ { from: signerAccount, to: escrowAddr, amount: delta, assetId: fundAssetId, skipSending: true },
2514
+ algodClient
2515
+ );
2516
+ atc.addTransaction({ txn: fundTxn.transaction, signer });
2517
+ }
2518
+ const escrowClient = new EscrowAppClient(
2519
+ { resolveBy: "id", id: escrowAppId, sender: signerAccount },
2520
+ algodClient
2521
+ );
2522
+ const feeMicros = delta <= 0 ? 2e3 : 1e3;
2523
+ const amendCall = await escrowClient.amendOrder(
2524
+ { price, quantity, slippage },
2525
+ {
2526
+ assets: [usdcAssetId, yesAssetId, noAssetId],
2527
+ apps: [marketAppId],
2528
+ sendParams: { fee: algokit4.microAlgos(feeMicros), skipSending: true }
2529
+ }
2530
+ );
2531
+ atc.addTransaction({ txn: amendCall.transaction, signer });
2532
+ const result = await atc.execute(algodClient, 4);
2533
+ return {
2534
+ success: true,
2535
+ txIds: result.txIDs,
2536
+ confirmedRound: result.confirmedRound
2537
+ };
2538
+ };
1791
2539
  var splitShares = async (config, params) => {
1792
2540
  const { algodClient, signer, activeAddress, usdcAssetId } = config;
1793
2541
  const { marketAppId, amount } = params;
@@ -1804,7 +2552,7 @@ var splitShares = async (config, params) => {
1804
2552
  let optInCosts = 0;
1805
2553
  const hasYesOptIn = await checkAssetOptIn(algodClient, activeAddress, yesAssetId);
1806
2554
  if (!hasYesOptIn) {
1807
- const optInTxn = await algokit3.transferAsset(
2555
+ const optInTxn = await algokit4.transferAsset(
1808
2556
  { from: signerAccount, to: activeAddress, assetId: yesAssetId, amount: 0, skipSending: true },
1809
2557
  algodClient
1810
2558
  );
@@ -1813,19 +2561,19 @@ var splitShares = async (config, params) => {
1813
2561
  }
1814
2562
  const hasNoOptIn = await checkAssetOptIn(algodClient, activeAddress, noAssetId);
1815
2563
  if (!hasNoOptIn) {
1816
- const optInTxn = await algokit3.transferAsset(
2564
+ const optInTxn = await algokit4.transferAsset(
1817
2565
  { from: signerAccount, to: activeAddress, assetId: noAssetId, amount: 0, skipSending: true },
1818
2566
  algodClient
1819
2567
  );
1820
2568
  atc.addTransaction({ txn: optInTxn.transaction, signer });
1821
2569
  optInCosts += 1e3;
1822
2570
  }
1823
- const algoPayment = await algokit3.transferAlgos(
1824
- { from: signerAccount, to: marketAddress, amount: algokit3.microAlgos(5e3 + optInCosts), skipSending: true },
2571
+ const algoPayment = await algokit4.transferAlgos(
2572
+ { from: signerAccount, to: marketAddress, amount: algokit4.microAlgos(5e3 + optInCosts), skipSending: true },
1825
2573
  algodClient
1826
2574
  );
1827
2575
  atc.addTransaction({ txn: algoPayment.transaction, signer });
1828
- const usdcTransfer = await algokit3.transferAsset(
2576
+ const usdcTransfer = await algokit4.transferAsset(
1829
2577
  { from: signerAccount, to: marketAddress, amount, assetId: usdcAssetId, skipSending: true },
1830
2578
  algodClient
1831
2579
  );
@@ -1858,24 +2606,24 @@ var mergeShares = async (config, params) => {
1858
2606
  let optInCosts = 0;
1859
2607
  const hasUsdcOptIn = await checkAssetOptIn(algodClient, activeAddress, usdcAssetId);
1860
2608
  if (!hasUsdcOptIn) {
1861
- const optInTxn = await algokit3.transferAsset(
2609
+ const optInTxn = await algokit4.transferAsset(
1862
2610
  { from: signerAccount, to: activeAddress, assetId: usdcAssetId, amount: 0, skipSending: true },
1863
2611
  algodClient
1864
2612
  );
1865
2613
  atc.addTransaction({ txn: optInTxn.transaction, signer });
1866
2614
  optInCosts += 1e3;
1867
2615
  }
1868
- const algoPayment = await algokit3.transferAlgos(
1869
- { from: signerAccount, to: marketAddress, amount: algokit3.microAlgos(5e3 + optInCosts), skipSending: true },
2616
+ const algoPayment = await algokit4.transferAlgos(
2617
+ { from: signerAccount, to: marketAddress, amount: algokit4.microAlgos(5e3 + optInCosts), skipSending: true },
1870
2618
  algodClient
1871
2619
  );
1872
2620
  atc.addTransaction({ txn: algoPayment.transaction, signer });
1873
- const yesTransfer = await algokit3.transferAsset(
2621
+ const yesTransfer = await algokit4.transferAsset(
1874
2622
  { from: signerAccount, to: marketAddress, amount, assetId: yesAssetId, skipSending: true },
1875
2623
  algodClient
1876
2624
  );
1877
2625
  atc.addTransaction({ txn: yesTransfer.transaction, signer });
1878
- const noTransfer = await algokit3.transferAsset(
2626
+ const noTransfer = await algokit4.transferAsset(
1879
2627
  { from: signerAccount, to: marketAddress, amount, assetId: noAssetId, skipSending: true },
1880
2628
  algodClient
1881
2629
  );
@@ -1912,7 +2660,7 @@ var claim = async (config, params) => {
1912
2660
  throw new Error("No tokens to claim");
1913
2661
  }
1914
2662
  const atc = new AtomicTransactionComposer();
1915
- const tokenTransfer = await algokit3.transferAsset(
2663
+ const tokenTransfer = await algokit4.transferAsset(
1916
2664
  { from: signerAccount, to: marketAddress, amount: tokenBalance, assetId, skipSending: true },
1917
2665
  algodClient
1918
2666
  );
@@ -1921,7 +2669,7 @@ var claim = async (config, params) => {
1921
2669
  {},
1922
2670
  {
1923
2671
  assets: [usdcAssetId, assetId],
1924
- sendParams: { skipSending: true, fee: algokit3.microAlgos(1e3) }
2672
+ sendParams: { skipSending: true, fee: algokit4.microAlgos(1e3) }
1925
2673
  }
1926
2674
  );
1927
2675
  atc.addTransaction({ txn: claimTxn.transaction, signer });
@@ -2259,6 +3007,21 @@ var AlphaClient = class {
2259
3007
  async proposeMatch(params) {
2260
3008
  return proposeMatch(this.config, params);
2261
3009
  }
3010
+ /**
3011
+ * Amends (edits) an existing unfilled order in-place.
3012
+ *
3013
+ * Cheaper and faster than cancel + recreate. The escrow contract adjusts
3014
+ * collateral automatically — sends you a refund if the new value is lower,
3015
+ * or requires extra funds if higher.
3016
+ *
3017
+ * Only works on orders with zero quantity filled.
3018
+ *
3019
+ * @param params - Amend parameters (marketAppId, escrowAppId, price, quantity, slippage?)
3020
+ * @returns Whether the amendment succeeded
3021
+ */
3022
+ async amendOrder(params) {
3023
+ return amendOrder(this.config, params);
3024
+ }
2262
3025
  // ============================================
2263
3026
  // Positions
2264
3027
  // ============================================